Como transformar um varchar em uma variável
-
- Rank: Estagiário Júnior
- Mensagens: 2
- Registrado em: Qua, 24 Mai 2006 11:12 am
- Localização: São Luís - MA
Estou fazendo um Trigger utilizando um sql dinâmico (a pacote DBMS_SQL). Para finalizar o que eu pretendo fazer, preciso descobrir como transformar um varchar em uma variável. No meu sql, como não sei previamente qual o nome da coluna, tenho que fazer com que o Oralce interprete o varchar ':new.' || v_campo como uma variável. Alguma idéia de como fazer isso?
-
- Rank: Estagiário Júnior
- Mensagens: 2
- Registrado em: Qua, 24 Mai 2006 11:12 am
- Localização: São Luís - MA
Estou fazendo um trigger pra realizar um atualização em cascata. Uso dois cursores, um para descobrir que usa a PK e outro pra descobrir o nome das FK.
De posse da tabela e dos campos que devo atualizar faço o update usando o pacote DBMS_SQL.
Perceba que eu tive que colocar no UPDATE o comando :new.ID. É justamento isso que eu não quero, pois se eu mudar o valor da minha chave vou ter que alterar essa trigger. Quero fazer isso dinamico.
Para isso, uso o seguinte SQL para descobrir as colunas que fazem parte da chave:
Depois queria fazer a concatenação do ':new' com o resultado desse cursor. Mas aí o Oracle não interpreta o :new.coluna como uma varchar e não como um comando que pegar a coluna da nova linha da tabela.
Deu pra enteder o problema?
/*Cursor que recupera todas as tabelas que utilização a chave primária dessa
tabela. Quando a chave primária é atualizadas, todos as tabelas listadas nessa
consulta deverão receber a atualização.*/
CURSOR c_tabelas_atualizadas is
SELECT A.TABLE_NAME, A.constraint_name FROM SYS.user_constraints A
WHERE A.r_constraint_name = 'PK_A';
/*Cursor que recupera o nome das colunas de cada chave estrangeira que utiliza
a chave primária dessa tabela*/
CURSOR c_colunas_atualizadas is
select COLUMN_NAME from user_Cons_Columns a
where a.constraint_name = v_restricao
ORDER BY A.position;
DBMS_SQL.PARSE (cur_update,
'UPDATE ' || v_tabela || ' SET ' || v_chave_FK(0) || ' = ' || :new.ID
|| ' WHERE ' || v_chave_FK(0) || ' = ' || :old.ID, DBMS_SQL.NATIVE);
Para isso, uso o seguinte SQL para descobrir as colunas que fazem parte da chave:
CURSOR c_colunas_chave_primaria is
select COLUMN_NAME from user_Cons_Columns a
where a.constraint_name = 'PK_A'
ORDER BY A.position;
Deu pra enteder o problema?
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes