Ruiz 0 Denunciar post Postado Novembro 18, 2008 Estou tentando criar um cursor montado atraves de uma tabela lida por DBLINK que realiza uma operação outra tabela da base local. Mas não estou conseguindo compilar minha procedure. Ele aponta um erro na declaração do cursor, dizendo que a tabela não existe. Quando retiro a variavel do DBLINK ele compila normalmente. Abaixo está um exemplo de codigo: vDBLink varchar2(30); CURSOR c_exemplo(DBLink varchar) IS SELECT a.campo1,a.campo2,a.campo3,b.campo1 FROM tabela1@DBLink,tabela2@DBLink WHERE a.campo1='XXX'; BEGIN FOR linha in c_exemplo(vDBLink) LOOP DELETE FROM ... WHERE user_name = linha.campo1; COMMIT; END LOOP; END; Alguem tem idéia do que está errado? obrigado, ruiz. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Novembro 19, 2008 Ponha o owner das tabelas na base lida. FROM <owner>.tabela1@DBLink,<owner>.tabela2@DBLink Acho que um sinonimo público na base destino resolve mas não estou certo. Qualificando com o owner é como uso aqui para algo semelhante. Compartilhar este post Link para o post Compartilhar em outros sites
Ruiz 0 Denunciar post Postado Novembro 21, 2008 Motta, valeu pela dica. Na veradde fiz de outra forma, eu usei cursor explicito, e coloquei minha query fora do bloco de declaração, assim só concateno minha variável que tem o nome do DBlink quando vou abrir o cursor, sem ter que passá-la como parâmetro na declaração. Algo parecido com isso: DECLARE type t_ref_cursor is ref cursor; C1 t_ref_cursor; BEGIN OPEN C1 FOR SELECT a.campo1,a.campo2,b.campo1 FROM tabela1 '@' || vDBLink ||' a, tabela2 b' || '@' || vDBLink || ' b ' LOOP FETCH C1 INTO EXIT WHEN C1%NOTFOUND; END LOOP; CLOSE C1; END; Fica aqui o registro caso alguem tenha problema semelhante. abraço, ruiz Compartilhar este post Link para o post Compartilhar em outros sites