Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

THỦ TỤC ORACLe - AUTHID chỉ được phép trong cấp giản đồ

Thủ tục của bạn dường như là một phần của một gói. Trong một gói, bạn chỉ có thể đặt quyền của người gọi (AUTHID CURRENT_USER ) ở cấp độ gói. Bạn không thể đặt nó cho từng quy trình riêng lẻ.

Di chuyển quyền của người gọi đến cấp độ gói:

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;

Hoặc tạo một thủ tục toàn cục (tức là ở cấp giản đồ chứ không phải ở cấp gói):

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. Làm cách nào để thêm khoảng trắng vào phía trước số của tôi nếu nó là một chữ số?

  2. Tạo truy vấn CẬP NHẬT TRẢ LẠI trong Hibernate

  3. Thực hành tốt để sử dụng chỉ mục ngược trên các khóa thay thế? (Oracle)

  4. Truyền tham số vào tệp Oracle SQL từ tệp Batch

  5. Oracle ORA-01008:không phải tất cả các biến bị ràng buộc Lỗi w / Tham số