Ir para conteúdo

POWERED BY:

Arquivado

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

Astaroth

Cursores dinamico e Execute immediate

Recommended Posts

Galera,

 

Tenho o seguinte caso tenho uma procedure q é lida por varios clientes diferente, acontece que um desses clientes quer algo que só vai atender ele, lendo tabelas que so vao existir pra ele. Portanto, nessa minha procedure existe uma verificacao que indica se é esse tal cliente, se for, com um 'Execute Immediate' eu chamo uma outra procedure que me retorna o "cursor" com essa regra especifica. Acontece que nao consigo retornar nada de PL com o EXECUTE IMMEDIATE.. Portanto retorno um SQL(ex: "select 1 from table" ) normal dentro de uma variavel.. A partir dessa variavel abro o cursor, portanto o codigo fica da seguinte forma:

 

IF condicao = true THEN
  -- retorna cursor especifico
  EXECUTE IMMEDIATE 'CALL ' || v_nome_da_prov || ' ' (:x, :b, :c)'
	USING IN x, IN b, OUT c;
   
  OPEN cursor_especifico FOR c;

 ELSE
   -- cursor normal 
  OPEN cursor;

END IF;

LOOP

  IF cursor%ISOPEN THEN
	FETCH cursor_especifico INTO rRetorno;
	EXIT WHEN cursor_especifico%NOTFOUND;
  ELSIF cursor_especifico%ISOPEN THEN
	FETCH cursor_especifico INTO rRetorno;
	EXIT WHEN cursor_especifico%NOTFOUND; 
  END IF;

  --REGRAS

END LOOP;

IF cursor%ISOPEN THEN
  CLOSE cursor;
ELSIF cursor_especifico%ISOPEN THEN
  CLOSE  cursor_especifico;
END IF;

Como pode ver tenho que ficar vendo qual cursor esta aberto para determinar qual sera usado.. Minha dúvida e se existe alguma maneira mais dinamica de se fazer isso.. Uso o Oracle 9i..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio já ter visto este assunto neste fórum , tentou no Busca ?

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.