2012-10-10 2 views
3

Je travaille sur ceci pour mes devoirs. Quand je lance, je reçois l'erreur:Obtention de ce message d'erreur oracle: PLS-00330: utilisation incorrecte du nom de type ou du nom de sous-type

PACKAGE PKG_Q4 Compiled. 
Warning: execution completed with warning 
PACKAGE BODY PKG_Q4 Compiled. 
50/12   PLS-00330: invalid use of type name or subtype name. 

J'ai regardé dans cela, mais je ne peux pas semblent trouver un moyen de le réparer. Il pointe vers cette ligne:

INTO v_Room_Number, v_Pet_Status, v_Customer_Source_Description, v_Invoice_Total 

Voici mon code:

CREATE OR REPLACE PACKAGE BODY PKG_Q4 
    AS 
     FUNCTION FN_Q4 
     (p_First_Name VARCHAR2, p_Last_Name VARCHAR2) 
     RETURN VARCHAR2 
     AS 
     v_Output VARCHAR2(500); 
     v_Room_Number NUMBER(3,0); 
     v_Pet_Status CHAR(1); 
     v_Customer_Source_Description VARCHAR2(30); 
     v_Invoice_Total NUMBER(7,2); 
     v_First_Name VARCHAR2(15); 
     v_Last_Name VARCHAR2(20); 
     v_Customer_Code CHAR(4); 
     v_Registration_Status_Code CHAR(1); 


     BEGIN 

      SELECT First_Name, Last_Name 
      INTO v_First_Name, v_Last_Name 
      FROM Customer 
      WHERE First_Name = p_First_Name AND 
       Last_Name = p_Last_Name; 




      Select Registration_Status_Code 
      INTO v_Registration_Status_Code 
      FROM Registration_Status; 






      IF v_Registration_Status_Code = 'N' THEN 
      SELECT Room.Room_Number, Room.Pet_Status, Customer_Source.Customer_Source_Description, Invoice.Invoice_Total 
      INTO v_Room_Number, v_Pet_Status, v_Customer_Source_Description, v_Invoice_Total 
      FROM Registration , Customer , Customer_Source , Room , Invoice 
      WHERE Customer.customer_code = Registration.customer_code AND 
        Customer_Source.customer_source_code = Customer.customer_source_code AND 
        Room.room_number = Registration.room_number AND 
        Registration.registration_number = Invoice.registration_number; 
       v_Output := 'Room Number:' || v_Room_Number ||'Pet Status:' || v_Pet_Status || 
          'Customer Source Code:' || v_Customer_Source_Description ||'Total Cost:' || v_Invoice_Total; 

     END IF; 
Return Varchar2; 

Répondre

4

Je parie que le problème est en fait cette ligne, au bas de l'extrait de code:

Return Varchar2; 
"Varchar2" est un type, vous ne pouvez pas l'utiliser comme l'argument d'une instruction RETURN.

Dans la déclaration de la fonction, RETURN VARCHAR2 est l'utilisation correcte, indiquant le type de la valeur retournée par la fonction. La déclaration proprement dite de retour doit retourner une valeur de ce type, comme

RETURN 'This is a string literal'; 

Dans votre cas, je devine que vous voulez:

RETURN v_Output; 
+0

Merci, je l'ai couru et il y avait pas d'erreur :) –

Questions connexes