Oi Aninha,

 

Via sqlplus podes fazer assim:

 

column res new_value max_val 

SELECT MAX(ID_PK) + 1 res 

FROM   sua_tabela; 

 

drop sequence seq_sua_tabela ; 

create sequence seq_sua_tabela start with &max_val;

 

 

Ricardo Ferro

www.vitarella.com.br

  <mailto:rfe...@vitarella.com.br> 

-----Mensagem original-----
De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome 
de Ana Cássia Japiassu Diniz
Enviada em: quarta-feira, 11 de julho de 2012 14:58
Para: oracle_br@yahoogrupos.com.br
Assunto: 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 <mailto: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 <mailto:oracle_br@yahoogrupos.com.br> , 
> Ana Cássia Japiassu Diniz 

> <anajapiassu@... <mailto: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/ 
<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/ <http://www.oraclebr.com.br/> 

------------------------------------------------------------------------------------------------------------------------
 Links do Yahoo! Grupos

 

    http://br.groups.yahoo.com/group/oracle_br/ 
<http://br.groups.yahoo.com/group/oracle_br/> 

 

    oracle_br-unsubscr...@yahoogrupos.com.br 
<mailto:oracle_br-unsubscr...@yahoogrupos.com.br> 

 

    http://br.yahoo.com/info/utos.html <http://br.yahoo.com/info/utos.html> 

 

 



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

Responder a