GARANTIR DESCONTO

Fórum Sql Dinâmico #28033

10/12/2004

0

Caros Amigos,
Estou tentando fazer a função abaixo:
create or replace 
function DoSQL(sSQL varchar2) return varchar2 is
begin
  execute immediate sSQL;
  return ´OK´;
end;

Mas me retorna o erro [color=blue:c4c3ba9cd6]ORA-14552: não é possível executar um DDL, commit ou rollback dentro de uma consulta ou de um DML[/color:c4c3ba9cd6]. Chamo a função da seguinte forma: [color=darkred:c4c3ba9cd6]Select DoSQL(´COMMIT´) FROM DUAL[/color:c4c3ba9cd6].
PS.: Tem que ser uma função. Em Procedure funciona, desde que uma não seja chamada por uma Function.



:arrow: [color=blue:c4c3ba9cd6]Título alterado pelo Moderador oTTo.[/color:c4c3ba9cd6]


Rodc

Rodc

Responder

Posts

10/12/2004

Motta

Select DoSQL(´COMMIT´) FROM DUAL. >> não pode

tente

em plsql

declare
...
begin
DoSQL(´COMMIT´);
end;

acho que vai funcionar, mas que passar um commit via uma functios que executa um sql ?!


Responder

Gostei + 0

10/12/2004

Rodc

Na verdade COMMIT é apenas para teste. A questão é que eu preciso chamar uma function que me retorna um número e esta funciton precisa fazer um update na tabela para incrementar o número. Como o SQL para pegar o valor é dinâmico (o nome do campo no update é montado conforme o parâmetro da função) tenho que usar o execute Immediate.
Mas o Oracle não me deixa fazer o update dinâmico se o código está dentro de uma função.
Talvêz exista outras formas de fazer SQL dinâmico. Tentei o EXECSQL mas o oracle fala que não existe esta função.
Agradeço se puder me ajudar.

Rodrigo Cesar


Responder

Gostei + 0

10/12/2004

Gandalf.nho

[b:eb89385a0c][color=red:eb89385a0c]Notificação de Infração às Regras de Conduta :[/color:eb89385a0c][/b:eb89385a0c]

Título do tópico em maiúsculas

Para maiores esclarecimentos pode mandar-me uma [url=http://delphiforum.icft.com.br/forum/privmsg.php?mode=post&u=8378]Mensagem Particular[/url].


Responder

Gostei + 0

10/12/2004

Motta

... Mas o Oracle não me deixa fazer o update dinâmico se o código está dentro de uma função ... Rodrigo Cesar


Deixa, o que ele não permite e chamar uma function que atualize via um select, chamando fora de um select não há problema.

No Delphi por exemplo use uma TStoredProc.


Responder

Gostei + 0

10/12/2004

Rodc

Mas eu preciso que o Banco me retorne um valor, o TStoredProc retorna o valor de uma função?


Responder

Gostei + 0

10/12/2004

Gandalf.nho

Mas eu preciso que o Banco me retorne um valor, o TStoredProc retorna o valor de uma função?


Sim


Responder

Gostei + 0

10/06/2005

Avmsistemas

Crio que vc possa executar o seguinte:

Select <NOME_DA_FUNCAO> FROM DUAL


Responder

Gostei + 0

13/06/2005

Motta

Mas eu preciso que o Banco me retorne um valor, o TStoredProc retorna o valor de uma função?



Sim , num parametro de output


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar