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

ORACLe ПРОЦЕДУРА - AUTHID разрешен само на ниво схема

Вашата процедура изглежда като част от пакет. В пакет можете да задавате само права за извикване (AUTHID CURRENT_USER ) на ниво пакет. Не можете да го зададете за всяка отделна процедура.

Или преместете правата за извикване на ниво пакет:

CREATE OR REPLACE PACKAGE pkg
AUTHID CURRENT_USER
AS

    PROCEDURE BCKUP;

    -- more types, procedures and functions

END pkg;


CREATE OR REPLACE PACKAGE BODY pkg
AS

    PROCEDURE BCKUP 

    statusmsg VARCHAR2(400);

    BEGIN
        --Backup records
        EXECUTE IMMEDIATE 'CREATE TABLE schemaname.tabname AS SELECT pgm.* FROM XYZ pgm, IJK prf WHERE prf.col1=pgm.col1 AND prf.ID IN(SELECT ID FROM TAB2)';
        COMMIT;

    EXCEPTION WHEN OTHERS THEN
        statusmsg :='SQL ERRROR CODE ' || SQLCODE|| ' -ERROR- ' ||SQLERRM;
        dbms_output.put_line('ERROR : ' || statusmsg);
    END BCKUP;

END pkg;

Или създайте глобална процедура (т.е. на ниво схема, а не на ниво пакет):

CREATE OR REPLACE PROCEDURE BCKUP 
AUTHID CURRENT_USER AS
statusmsg VARCHAR2(400);

BEGIN
    --Backup records
    EXECUTE IMMEDIATE 'CREATE TABLE schemaname.tabname AS SELECT pgm.* FROM XYZ pgm, IJK prf WHERE prf.col1=pgm.col1 AND prf.ID IN(SELECT ID FROM TAB2)';
    COMMIT;

EXCEPTION WHEN OTHERS THEN
    statusmsg :='SQL ERRROR CODE ' || SQLCODE|| ' -ERROR- ' ||SQLERRM;
    dbms_output.put_line('ERROR : ' || statusmsg);
END BCKUP;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Актуализирайте таблица от друга таблица в Oracle

  2. Преобразуване на времево клеймо в Oracle за формат ГГГГ-ММ-ДД ЧЧ:ММ:СС

  3. Как да добавите набор от ключове (UniqueID) към временна таблица за по-късно INSERT в производствена таблица

  4. SQL вътрешно присъединяване при избрани изрази

  5. Четене на cob ред по ред с pl\sql