2016-11-23 63 views
0

我是PL/SQL的新手,我試圖創建這個包,到目前爲止我遇到了很多問題。PLS-00330在包體上無效使用類型名稱或子類型名稱

create or replace PACKAGE Pkg IS 
    TYPE motivos IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER; 
    PROCEDURE Proc(lote IN VARCHAR2, e IN NUMBER, obs IN VARCHAR2, motives IN motivos); 
END Pkg; 
/
CREATE OR REPLACE PACKAGE BODY Pkg IS 
    PROCEDURE Proc(lote IN VARCHAR2, e IN NUMBER, obs IN VARCHAR2, motives IN motivos) AS 
    exist NUMBER(2); 
    BEGIN 
     SELECT count(*) INTO exist 
     FROM Lote l 
     WHERE l.numero=lote; 

     IF exist>0 THEN 
      UPDATE Lote SET empleadoDescarte=e, observacionesDescarte=obs, fechaDescarte=sysdate WHERE numero=lote; 
     COMMIT; 

      FOR motivo IN motivos   
      LOOP  
       Insert into MOTIVO (NROLOTE, MOTIVO) values (lote,motivo); 
      END LOOP;   
     COMMIT; 

      DBMS_OUTPUT.PUT_LINE('Ok.'); 
     ELSE 
      DBMS_OUTPUT.PUT_LINE('Error.'); 
     END IF;  
    END; 
END Pkg; 
/

當我運行這是一個腳本,它給了我下面的錯誤:

Error(13,4): PL/SQL: Statement ignored 
Error(13,18): PLS-00330: invalid use of type name or subtype name 

問題是與exist,我一直無法弄清楚爲什麼通過閱讀其他anwsers相關對此問題

回答

1

您在如何使用變量和類型方面存在一些問題;嘗試編輯這樣說:

CREATE OR REPLACE PACKAGE BODY Pkg IS 
    PROCEDURE Proc(
        lote  IN VARCHAR2, 
        e   IN NUMBER, 
        obs  IN VARCHAR2, 
        motives IN motivos 
       ) AS 
     exist         NUMBER(2); 
    BEGIN 
     SELECT COUNT(*) 
      INTO exist 
      FROM Lote l 
     WHERE l.numero = lote; 

     IF exist > 0 
     THEN 
      UPDATE Lote 
       SET empleadoDescarte   = e, 
        observacionesDescarte = obs, 
        fechaDescarte   = SYSDATE 
      WHERE numero = lote; 

      COMMIT; 

      FOR i IN motives.first .. motives.last 
      LOOP 
       INSERT INTO MOTIVO(NROLOTE, MOTIVO) 
        VALUES (lote, motives(i)); 
      END LOOP; 

      COMMIT; 

      DBMS_OUTPUT.PUT_LINE('Ok.'); 
     ELSE 
      DBMS_OUTPUT.PUT_LINE('Error.'); 
     END IF; 
    END; 
END Pkg; 
/

此外,更好的命名約定可以很容易地看到這種問題非常有用;例如,如果你打電話給你的IN參數p_XXX和你的類型ty_XXX,在代碼的每一個地方很容易理解什麼是參數,類型等等

+0

謝謝,我會按照你的建議 – moondaisy

相關問題