Sql Dinâmico
Caros Amigos,
Estou tentando fazer a função abaixo:
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]
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
Curtidas 0
Respostas
Motta
10/12/2004
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 ?!
tente
em plsql
declare
...
begin
DoSQL(´COMMIT´);
end;
acho que vai funcionar, mas que passar um commit via uma functios que executa um sql ?!
GOSTEI 0
Rodc
10/12/2004
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
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
GOSTEI 0
Gandalf.nho
10/12/2004
[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].
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].
GOSTEI 0
Motta
10/12/2004
... 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.
GOSTEI 0
Rodc
10/12/2004
Mas eu preciso que o Banco me retorne um valor, o TStoredProc retorna o valor de uma função?
GOSTEI 0
Gandalf.nho
10/12/2004
Mas eu preciso que o Banco me retorne um valor, o TStoredProc retorna o valor de uma função?
Sim
GOSTEI 0
Avmsistemas
10/12/2004
Crio que vc possa executar o seguinte:
Select <NOME_DA_FUNCAO> FROM DUAL
Select <NOME_DA_FUNCAO> FROM DUAL
GOSTEI 0
Motta
10/12/2004
Mas eu preciso que o Banco me retorne um valor, o TStoredProc retorna o valor de uma função?
Sim , num parametro de output
GOSTEI 0