Oracle
 sql >> база данни >  >> RDS >> Oracle

Грешка в Oracle PL/SQL процедура

Можете да видите грешката от пакета, като използвате show errors веднага след изпълнение на израза или с select * from user_errors where name = 'COLUMN_SEC_PACKAGE' .

В тялото на пакета ви липсва END; имате такъв за функцията, но не и за пакета:

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
/

Полезно е да посочите какво завършвате във всяка точка, за да можете лесно да изберете какво липсва; отстъпът помага и за това, разбира се. Вие също не сте показали / след спецификацията на пакета, което може просто да е грешка при копиране и поставяне. Трябва да изпълните и двете команди с / след всяко:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. подзаявка - получаване на най-висок резултат

  2. PLS-00382:изразът е от грешен тип чрез изпълнение на функция и опитайте да поставите върнатия тип в променлива

  3. Как да отпечатате SYS_REFCURSOR с прозорец на PLSQLDeveloper?

  4. Проверете на колко години е една база данни на Oracle?

  5. SQL подзаявка за присъединяване