Oracle
 sql >> Base de données >  >> RDS >> Oracle

Erreur dans la procédure Oracle PL/SQL

Vous pouvez voir l'erreur du package en utilisant show errors immédiatement après l'exécution de l'instruction, ou avec select * from user_errors where name = 'COLUMN_SEC_PACKAGE' .

Il manque un END dans le corps de votre package; vous en avez un pour la fonction mais pas pour le 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;  -- end of function
-- no end for the package
/

Il est utile de spécifier ce que vous terminez à chaque point afin de pouvoir facilement repérer ce qui manque; l'indentation aide aussi bien sûr. Vous n'avez pas non plus montré de / après la spécification du package, ce qui pourrait simplement être une erreur de copier-coller. Vous devez exécuter les deux commandes, avec un / après chaque :

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;
/