Não seria o caso simplesmente de vc executar uma Consulta num script que te 
dê isso, tipo :

DECLARE
   v_max number;
BEGIN
   select max(nomedacolunaID) into v_max from nomedatabela;
   execute immediate ('CREATE SEQUENCE nomedasequence START WITH ' || v_max);
END;
/


 ?? 

 []s

   Chiappa


--- Em oracle_br@yahoogrupos.com.br, Ana Cássia Japiassu Diniz 
<anajapiassu@...> escreveu
>
> 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
> <jlchiappa@...>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]
>


Responder a