आपकी प्रक्रिया एक पैकेज का हिस्सा लगती है। एक पैकेज में, आप केवल आह्वानकर्ता अधिकार (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;