2017-10-16 6 views
2

connecté comme CC_LOPES utilisateur j'ai cette procédure:mauvais numéro ou types d'arguments appelant une procédure d'Oracle SQL Developer

create or replace PACKAGE BODY   "P_MSG_HOTEL" AS 

    function parse_msg(p_id in number, p_msg in varchar2) return number is 
    ... 
end; 

que je tente d'exécuter à partir d'Oracle SQL Developer avec

EXECUTE P_MSG_HOTEL.parse_msg(596210657, '@S,358639058787154;E,10;D,05102017145210,05102017145210;G,4046393,51206983,258,8;M,4709;S,0;IO,1,0,0;DI,79DEAD60'); 

Je suis arrivé cette erreur:

Error que empieza en la línea: 1 del comando : 
BEGIN P_MSG_HOTEL.parse_msg(596210657, '@S,358639058787154;E,10;D,05102017145210,05102017145210;G,4046393,51206983,258,8;M,4709;S,0;IO,1,0,0;DI,79DEAD60'); END; 
Informe de error - 
ORA-06550: línea 1, columna 126: 
PLS-00306: wrong number or types of arguments in call to 'PARSE_MSG' 
ORA-06550: línea 1, columna 126: 
PL/SQL: Statement ignored 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

Répondre

1

suis vraiment heureux de savoir Incase vous vraiment le error vous avez mentionné dans votre question.

Idéalement vous devez avait obtenu quelque chose comme:

 * 
ERROR at line 1: 
ORA-06550: line 1, column 7: 
PLS-00221: 'PARSE_MSG' is not a procedure or is undefined 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored 

Mais vous avez posté:

Error que empieza en la línea: 1 del comando : 
BEGIN P_MSG_HOTEL.parse_msg(596210657, '@S,358639058787154;E,10;D,05102017145210,05102017145210;G,4046393,51206983,258,8;M,4709;S,0;IO,1,0,0;DI,79DEAD60'); END; 
Informe de error - 
ORA-06550: línea 1, columna 126: 
PLS-00306: wrong number or types of arguments in call to 'PARSE_MSG' 
ORA-06550: línea 1, columna 126: 
PL/SQL: Statement ignored 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

Cela semble calme trompeur. J'ai fait la démonstration ci-dessous pour montrer ce que je voulais dire.

CREATE OR REPLACE PACKAGE P_MSG_HOTEL 
AS 
    FUNCTION parse_msg (p_id IN NUMBER, p_msg IN VARCHAR2) 
     RETURN NUMBER; 
END; 
/
CREATE OR REPLACE PACKAGE BODY P_MSG_HOTEL 
AS 
    FUNCTION parse_msg (p_id IN NUMBER, p_msg IN VARCHAR2) 
     RETURN NUMBER 
    IS 
    BEGIN 
     RETURN 1; 
    END; 
END; 

Lors de l'exécution de la façon dont vous montriez lui donne l'erreur qui dit:

EXECUTE P_MSG_HOTEL.parse_msg(596210657, 
'@S,358639058787154;E,10;D,05102017145210,05102017145210;G,4046393,51206983,258,8;M,4709;S,0;IO,1,0,0;DI,79DEAD60'); 

Erreur

* 
ERROR at line 1: 
ORA-06550: line 1, column 7: 
PLS-00221: 'PARSE_MSG' is not a procedure or is undefined 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored 

Cela signifie clairement Oracle n'est pas en mesure d'identifier votre fonction pendant l'exécution. Cependant quand je aime:

SQL> 
select P_MSG_HOTEL.parse_msg(596210657, '@S,358639058787154;E,10;D,05102017145210,05102017145210;G,4046393,51206983,258,8;M,4709;S,0;IO,1,0,0;DI,79DEAD60') as col 
from dualSQL> 2 
    3/

     COL 
---------- 
     1 

je reçois la sortie. Ou si j'utilise un bloc anonyme, j'obtiens le résultat.

SQL> DECLARE 
    x NUMBER; 
BEGIN 
    x := 
     P_MSG_HOTEL.parse_msg (
     596210657, 
     '@S,358639058787154;E,10;D,05102017145210,05102017145210;G,4046393,51206983,258,8;M,4709;S,0;IO,1,0,0;DI,79DEAD60'); 
    2  DBMS_OUTPUT.put_line (x); 
END; 
/ 
1 

PL/SQL procedure successfully completed. 

SQL> 

Donc, en résumé, vous ne pouvez pas utiliser cette fonction comme vous l'êtes.

0

ne pas exécuter le function directement. soit le faire à l'intérieur DBMS_OUTPUT

SET SERVEROUTPUT ON 

EXEC DBMS_OUTPUT.PUT_LINE(P_MSG_HOTEL.parse_msg(arg1,arg2)); 

Ou exécuter une requête avec la fonction de sélection pour obtenir la sortie.

select P_MSG_HOTEL.parse_msg(arg1,arg2) FROM DUAL; 
0

Vous ne pouvez pas utiliser exécuter la commande pour exécuter une fonction, la fonction retourne une valeur qui doit être capturé quelque part, Utiliser le bloc anonyme:

declare 
    f_return number; 
begin 
    f_return := P_MSG_HOTEL.parse_msg(596210657, '@S,358639058787154;E,10;D,05102017145210,05102017145210;G,4046393,51206983,258,8;M,4709;S,0;IO,1,0,0;DI,79DEAD60'); 
end; 
/