Oracle
 sql >> Database >  >> RDS >> Oracle

Errore nella procedura Oracle PL/SQL

Puoi vedere l'errore dal pacchetto usando show errors subito dopo aver eseguito l'istruzione, o con select * from user_errors where name = 'COLUMN_SEC_PACKAGE' .

Nel corpo del pacco manca un END; ne hai uno per la funzione ma non per il pacchetto:

CREATE OR REPLACE package body COLUMN_SEC_PACKAGE is
  FUNCTION TEST_SEC( OWNER VARCHAR2, OBJNAME VARCHAR2) RETURN VARCHAR2 is
    v_SQL VARCHAR2(2000):='1=0';
  begin
    IF (SYS_CONTEXT('USERENV','SESSION_USER') ='VPD1') THEN
      v_SQL:=NULL;
    END IF;
    RETURN V_SQL;
  end;  -- end of function
-- no end for the package
/

È utile specificare cosa stai finendo in ogni punto in modo da poter facilmente individuare cosa manca; l'indentazione aiuta anche questo ovviamente. Inoltre, non hai mostrato un / dopo la specifica del pacchetto, che potrebbe essere solo un errore di copia e incolla. Devi eseguire entrambi i comandi, con un / dopo ciascuno:

CREATE OR REPLACE PACKAGE COLUMN_SEC_PACKAGE AS
  FUNCTION TEST_SEC (OWNER VARCHAR2, OBJNAME VARCHAR2) RETURN VARCHAR2;
END COLUMN_SEC_PACKAGE;
/
CREATE OR REPLACE package body COLUMN_SEC_PACKAGE is
  FUNCTION TEST_SEC( OWNER VARCHAR2, OBJNAME VARCHAR2) RETURN VARCHAR2 is
    v_SQL VARCHAR2(2000):='1=0';
  begin
    IF (SYS_CONTEXT('USERENV','SESSION_USER') ='VPD1') THEN
      v_SQL:=NULL;
    END IF;
    RETURN V_SQL;
  end TEST_SEC;
END COLUMN_SEC_PACKAGE;
/