sql >> データベース >  >> RDS >> Oracle

ORACLePROCEDURE-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. ORDERBYまたはPHPソート関数を使用したMySQLクエリのソート

    2. MySQLはデータベースのユーザーに特権を付与します

    3. MySQLのパフォーマンス:MySQLとMariaDB

    4. PHP、MYSQL、テーブルソーター付きのHTMLテーブル