Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ruiz

[Resolvido] Cursor com DBLINK

Recommended Posts

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.