Ir para conteúdo

POWERED BY:

Arquivado

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

_Patrícia_

[Resolvido] Executar função via SQL

Recommended Posts

Olá Pessoal,

 

Preciso executar uma função, no oracle SQL Developer,

via SQL,

 

Mas usando o seguinte comando não funciona:

 

SELECT NOMEDAFUNÇÃO(PAR1, PAR2, PAR3...) FROM DUAL;

 

Retorna ORA-00904: "PAR3": identificador inválido

 

Acontece isso pra todos os parametros que são passados!

 

Alguém sabe me ajudar qual é a forma correta ?

 

Patrícia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguma vírgula onde deveria ser um ponto decimal (isto depende dos parametros do BD) ?

 

Pode publicar a function ou menos seus parametros.

 

Isto deveria funcionar, sempre faço isto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a função é a seguinte

 

create or replace

FUNCTION ASO_D_1

(

IDASO IN NUMBER,

UPDATEUSU IN NUMBER

) RETURN VARCHAR2 AS

BEGIN

UPDATE ASO SET CODIUSUARIO = UPDATEUSU

WHERE (IDASO = IDASO);

DELETE FROM ASO

WHERE (IDASO = IDASO);

 

RETURN NULL;

 

END ASO_D_1;

Compartilhar este post


Link para o post
Compartilhar em outros sites

ORA-00904:string: invalid identifier

 

Cause: The column name entered is either missing or invalid.

 

Action: Enter a valid column name. A valid column name must begin with a letter, be less than or equal to 30 characters, and consist of only alphanumeric characters and the special characters $, _, and #. If it contains other characters, then it must be enclosed in double quotation marks. It may not be a reserved word.

 

 

Pelo erro confere se nao tem caracteres errados...

 

Tenta ae... =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifiquei os cracter, todos certos,

 

fazendo assim:

 

SELECT ASO_D_1 (IDASO, UPDATEUSU) FROM DUAL;

 

Retorna o seguinte erro:

 

ORA-00904: "UPDATEUSU": identificador inválido

 

=T

Compartilhar este post


Link para o post
Compartilhar em outros sites

No SqlPlus ou similar não vai assim , pois IDASO e UPDATEUSU não são colunas de DUAL.

 

Tente com um literal

 

SELECT ASO_D_1 ('joao', 'maria') FROM DUAL

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei desta forma

 

SELECT ASO_D_1 ('joao', 'maria') FROM DUAL

 

E RETORNA A SEGUINTE SEQUENCIA

 

ORA-14551: não é possível executar uma operação DML dentro de uma consulta

ORA-06512: em "ANDREY.ASO_D_1", line 7

14551. 00000 - "cannot perform a DML operation inside a query "

*Cause: DML operation like insert, update, delete or select-for-update

cannot be performed inside a query or under a PDML slave.

*Action: Ensure that the offending DML operation is not performed or

use an autonomous transaction to perform the DML operation within

the query or PDML slave.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só vi agora ...

 

Functions que fazem DML (data manipulation language) não podem ser chamadas via SELECT, ou seja nada de insert´s ou update´s.

 

É uma restrição sem contorno.

 

Use um bloco PLSQL ou uma outra procedure ou function para chamá-las.

 

DECLARE
  VN_IDASO NUMBER;
  VN_UPDATEUSU NUMBER;
  VS_ASO_D_1 VARCHAR2(255);
BEGIN
  VN_IDASO := 123;
  VN_UPDATEUSU := 4567;
  VS_ASO_D_1 := ASO_D_1(VN_IDASO,VN_UPDATEUSU);
  DBMS_OUTPUT.PUT_LINE(VS_ASO_D_1);
END;

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.