Ana

Um ponto que acho importante: a chave composta (antiga PK), que coincide
com as duas FK's (tabela associativa), deveria agora ser uma "unique", por
questão de integridade.

Verifique a regra de negócio. Caso isso realmente seja pertinente, declare
uma unique também.

[ ]

André

Em 11 de julho de 2012 15:42, Étore Schiavini <et...@schiavini.inf.br>escreveu:

> **
>
>
> Só uma pergunta:
>
> Por que não utilizar a própria sequence para popular a nova coluna (id)
> também nas linhas pre-existentes ?
>
> Ao meu ver um simples "update tabela set id = sequencia.nextval" resolveria
> tudo de uma só vez.
>
> Étore
>
>
> -----Original Message-----
> From: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br]
> On
> Behalf Of Ana Cássia Japiassu Diniz
> Sent: Wednesday, July 11, 2012 2:58 PM
> To: oracle_br@yahoogrupos.com.br
> Subject: Re: [oracle_br] Re: Ajuda
>
> Obrigada a todos pela ajuda.
>
> Consegui fazer praticamente toda a alteração que preciso. Falta apenas a
> criação da sequence para esta tabela, cujo o valor inicial deverá ser o
> último valor do novo atributo adicionado na tabela.
> Como eu posso definir o start with da sequence com este valor?
> Não posso colocar isso fixo, pois esta alteração precisarei fazer em três
> bancos que contêm dados diferentes.
>
> Muito obrigada.
>
> Ana
> Em 11 de julho de 2012 14:13, J. Laurindo Chiappa
> <jlchia...@yahoo.com.br>escreveu:
>
> > **
> >
> >
> > Bom dia, Ana - não vejo grandes problemas, mas vc deverá saber que :
> >
> > a) no RDBMS Oracle vc normalmente não consegue mudar a PK, então ela
> > tem que ser dropada e recriada com o novo atributo que vc quer :
> > Obviamente, então, se essa PK a ser alterada é usada como origem para
> > FK de outras tabelas, logicamente vc deverá dropar as FKs primeiro
> > (quebrando o uso da PK como pai), e depois da nova PK criada, vc vai
> > ter que recriar as FKs, apontando para a nova PK.... Obviamente
> > também, se a PK vai ser em cima de uma nova coluna, essa nova coluna
> > tem que ser Adicionada não só na tabela-pai MAS também nas
> > tabelas-filhas, para servir de base para a nova FK referenciando a
> > nova PK... É muito, muito frequente o pessoal se "esquecer" deste
> > Importante detalhe e se dar mal na hora da implementação por causa das
> FKs..
> >
> > b) vc até poderia, ao menos em parte, fazer via DBMS_REDEFINITION, mas
> > imho é mais fácil/direto executar os comandos manualmente, e também já
> > que vc quer a maneira mais segura, eu Recomendaria que vc solicitasse
> > uma janela de manutenção, em que o banco estará inacessível para vc
> > poder fazer as alterações todas sem se preocupar com locks eventuais,
> > acessos de usuário, dados sendo entrados/alterados/removidos, etc...
> >
> > c) como é Normal em qquer alteração, vc Tem que Ter um backup o mais
> > recente possível, Válido e testado, antes de proceder : muitas vezes
> > se agenda alterações do tipo para depois da janela de backup
> > Exatamente por esse motivo...
> >
> > Isto posto, um exemplo rápido - apenas notando que vc infelizmente Não
> > nos Dá a versão, então estou supondo ao menos versão 10gr2 :
> >
> > => criação de tabela com PK e de algumas FKs que a referenciam :
> >
> > SYSTEM@O10GR2::SQL>create table T_PAI (c1 number, c2 varchar2(40), c3
> > varchar2(80) );
> >
> > Tabela criada.
> >
> > SYSTEM@O10GR2::SQL>alter table T_PAI add constraint T_PAI_PK primary
> > key (c1, c2);
> >
> > Tabela alterada.
> >
> > SYSTEM@O10GR2::SQL>insert into T_PAI values(1, 'Chave 1', 'Linha 1');
> >
> > 1 linha criada.
> >
> > SYSTEM@O10GR2::SQL>insert into T_PAI values(2, 'Chave 2', 'Linha 2');
> >
> > 1 linha criada.
> >
> > SYSTEM@O10GR2::SQL>create table T_FILHA1 (c1 number, c2 varchar2(40),
> > c3
> > varchar2(80) );
> >
> > Tabela criada.
> >
> > SYSTEM@O10GR2::SQL>create table T_FILHA2 (c1 number, c2 varchar2(40),
> > c3
> > varchar2(80) );
> >
> > Tabela criada.
> >
> > SYSTEM@O10GR2::SQL>alter table T_FILHA1 add constraint T_FILHA1_FK
> > foreign key (c1, c2) references T_PAI(c1, c2);
> >
> > Tabela alterada.
> >
> > SYSTEM@O10GR2::SQL>alter table T_FILHA2 add constraint T_FILHA2_FK
> > foreign key (c1, c2) references T_PAI(c1, c2);
> >
> > Tabela alterada.
> >
> > SYSTEM@O10GR2::SQL>insert into T_FILHA1 values(1, 'Chave 1', 'Filha
> > 1');
> >
> > 1 linha criada.
> >
> > SYSTEM@O10GR2::SQL>insert into T_FILHA2 values(2, 'Chave 2', 'Filha
> > 2');
> >
> > 1 linha criada.
> >
> > SYSTEM@O10GR2::SQL>commit;
> >
> > Commit concluido.
> >
> > ==> veja que Não Posso dropar PK usada por FKs :
> >
> > SYSTEM@O10GR2::SQL>alter table T_PAI drop constraint T_PAI_PK; alter
> > table T_PAI drop constraint T_PAI_PK
> > *
> > ERRO na linha 1:
> > ORA-02273: esta chave exclusiva/primaria e referenciada por algumas
> > chaves externas
> >
> > => vou então listar as FKs, já gerando os comandos de drop que eu só
> > copio & colo :
> >
> > SYSTEM@O10GR2::SQL>select 'alter table ' || table_name || ' drop
> > constraint ' || constraint_name || ';' from dba_constraints where
> > owner='SYSTEM' and r_constraint_name='T_PAI_PK';
> >
> > 'ALTERTABLE'||TABLE_NAME||'DROPCONSTRAINT'||CONSTRAINT_NAME||';'
> > ----------------------------------------------------------
> > alter table T_FILHA1 drop constraint T_FILHA1_FK; alter table T_FILHA2
> > drop constraint T_FILHA2_FK;
> >
> > => o copy/paste em ação :
> >
> > SYSTEM@O10GR2::SQL>alter table T_FILHA1 drop constraint T_FILHA1_FK;
> >
> > Tabela alterada.
> >
> > SYSTEM@O10GR2::SQL>alter table T_FILHA2 drop constraint T_FILHA2_FK;
> >
> > Tabela alterada.
> >
> > SYSTEM@O10GR2::SQL>
> >
> > => agora é dropar a PK, criar a sequence que vai alimentar o ID, criar
> > a coluna de ID na tabela-pai E nas filhas e adicionar a nova PK e as
> > novas FKs, normal, okdoc ?
> >
> > []s
> >
> > Chiappa
> >
> >
> > --- Em oracle_br@yahoogrupos.com.br, Ana Cássia Japiassu Diniz
> > <anajapiassu@...> escreveu
> > >
> > > Olá pessoal, bom dia.
> > >
> > > Estou com o seguinte problema:
> > >
> > > Tenho uma tabela que era resultado de um relacionamento nxm e sua
> > > chave primária era composta com por dosi atributos. Preciso alterar
> > > esta chave para que um novo atributo (apenas ele) passr a ser a
> > > chave primária. Este atributo é um id. A tabela já possui dados e não
> poderão ser perdidos.
> > Qual
> > > a maneira mais segura para preencher os dados deste novo atributo
> > > que
> > será
> > > a PK? O valores deste atributo deverão ser sequencial.
> > >
> > > Também passará a existir uma sequence que deverá ser criada com o
> > > valor inicial igual último valor de registros da tabela, ou seja, o
> > > último
> > valor
> > > do novo atributo.
> > >
> > > Desde já agradeço a ajuda.
> > >
> > > Ana
> > >
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> >
> >
> >
>
> --
> "A Cristo, por Maria,
> Juntos até o Céu."
>
> Jesus Misericordioso, Eu confio em Vós!
>
> "Viver e levar para o mundo a misericórdia, é a nossa missão"
> Comunidade Católica Missionária Filhos da Misericórdia
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> ------------------------------------
>
> ----------------------------------------------------------
> ----------------------------------------------
> >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de
> inteira
> responsabilidade de seus remetentes.
> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
> ----------------------------------------------------------
> ----------------------------------------------
> >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package »
> >Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO
> >ESPAÇO! VISITE: http://www.oraclebr.com.br/
> ----------------------------------------------------------
> -------------------------------------------- Links do Yahoo! Grupos
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

--------------------------------------------------------------------------------------------------------------------------
>Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira 
>responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------
>Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » 
>Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: 
>http://www.oraclebr.com.br/  
------------------------------------------------------------------------------------------------------------------------
 Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    oracle_br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Responder a