Procedure stockée Oracle erreur

Procedure stockée Oracle erreur - SQL/NoSQL - Programmation

Marsh Posté le 10-05-2005 à 16:47:52    

Salut,
 
Je suis en train d'apprendre oracle, et après avoir crée une procedure stockée, je n'arrive pas a l'invoquer a partir de SQL* Plus. J'ai changé le mode de IN OUT a OUT, mais j'ai toujours une erreur.
J'utilise oracle 8i sur une machine win2kSP4.
 
Voici la procedure stockée:

Code :
  1. create or replace procedure myproc4
  2. (phone_no in out varchar2)
  3. is
  4. begin
  5. phone_no:='+33 '||substr(phone_no,2,1)||'-'||substr(phone_no,3,2)||'-'||substr(phone_no,5,2)||'-'||substr(phone_no,7,2)||'-'||substr(phone_no,9,2);
  6. DBMS_OUTPUT.put_line(phone_no);
  7. end myproc4;


 
Voici comment je l'invoque a partir de SQL* Plus:
 

Code :
  1. set serveroutput on
  2. execute myproc4('0145478523');


 
Voici l'erreur:
 

Citation :


BEGIN myproc4('0145478523'); END;
 
              *
ERREUR à la ligne 1 :
ORA-06550: Ligne 1, colonne 15 :
PLS-00363: expression '0565646555' ne peut être utilisée comme cible
d'affectation
ORA-06550: Ligne 1, colonne 7 :
PL/SQL: Statement ignored


 
Il ne me semble pas que la syntaxe de cette procedure soit fautive, mais ou se trouve mon erreur?


---------------
The bible was written by people who believed the earth was flat!
Reply

Marsh Posté le 10-05-2005 à 16:47:52   

Reply

Marsh Posté le 10-05-2005 à 19:37:36    

j'aurais plutot fait une fonction a ta place
 

Code :
  1. CREATE FUNCTION fct (phone_no IN VARCHAR2) RETURN VARCHAR2IS
  2. ret VARCHAR2(100);
  3. BEGIN
  4.     ret := '+33 '||SUBSTR(phone_no,2,1)||'-'||SUBSTR(phone_no,3,2)||'-'||
  5.            SUBSTR(phone_no,5,2) ||'-'||SUBSTR(phone_no,7,2)||'-'||SUBSTR(phone_no,9,2);
  6.     DBMS_OUTPUT.put_line(ret);   
  7.     RETURN ret;
  8. END fct;


 
moi j'aurais fait comme ça... si le problème persiste, envoie moi un petit mail, je veux bien testé (ou même chercher). (J'ai Oracle 9i Release 2 sous WinXP SP2)

Reply

Marsh Posté le 13-05-2005 à 21:58:21    

Tu passes une valeur constante à une procedure qui doit écrire dedans, d'où le "expression '0565646555' ne peut être utilisée comme cible".
 
Une fonction est probablement plus appropriée, comme le dit moi23372 ;)

Reply

Marsh Posté le 25-02-2008 à 16:09:51    

Merci Beegee.  
 
Je remonte le post, qui date de presque 3 ans... En tapant "PLS-00363" sous Google, j'arrive ici.  :bounce:  
 
J'ai fait la même erreur : passer une constante à une fonction qui attendait un argument en IN + OUT. Je ne débute pas, pourtant.  :pfff: Tout ça parce que la constante en question porte le même nom qu'une variable !  :heink:  
 
Comme quoi, c'est important de suivre les normes de développement et les règles de nommage...  :sol:

Reply

Marsh Posté le 26-02-2008 à 16:05:30    

OUT, c'est le mal de toute façon : si tu dois retourner une valeur, alors t'as besoin d'une FONCTION et non d'une PROCEDURE.
 
C'est d'autant plus vrai maintenant qu'Oracle gère sans problème les record maintenant (structure si tu préfères)
 
Rappels des bases de l'algo :
 
Une PROCEDURE fait quelquechose (et donc ne retourne rien)
Une FONCTION vaut quelquechose (et si possible, ne fait rien)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed