Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ORACLE PROCEDURE - 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. क्या सत्र को मारे बिना ऑरैकल में एक प्रश्न को मारना संभव है?

  2. यह जांचने का सबसे कारगर तरीका क्या है कि Oracle में कोई रिकॉर्ड मौजूद है या नहीं?

  3. oci_bind_by_name PHP में काम नहीं कर रहा है

  4. कथन से चयन में तालिका प्रकार का उपयोग कैसे करें?

  5. मैं अपने Oracle DB में सभी अनुक्रमों को 0 मान पर कैसे रीसेट कर सकता हूं?