Execute Immediate within a stored procedure keeps giving insufficient priviliges error

后端 未结 4 499
闹比i
闹比i 2020-11-29 05:03

Here is the definition of the stored procedure:

CREATE OR REPLACE PROCEDURE usp_dropTable(schema VARCHAR, tblToDrop VARCHAR) IS
BEGIN
  DECLARE v_cnt NUMBER;         


        
4条回答
  •  清酒与你
    2020-11-29 05:30

    You should use this example with AUTHID CURRENT_USER :

    CREATE OR REPLACE PROCEDURE Create_sequence_for_tab (VAR_TAB_NAME IN VARCHAR2)
       AUTHID CURRENT_USER
    IS
       SEQ_NAME       VARCHAR2 (100);
       FINAL_QUERY    VARCHAR2 (100);
       COUNT_NUMBER   NUMBER := 0;
       cur_id         NUMBER;
    BEGIN
       SEQ_NAME := 'SEQ_' || VAR_TAB_NAME;
    
       SELECT COUNT (*)
         INTO COUNT_NUMBER
         FROM USER_SEQUENCES
        WHERE SEQUENCE_NAME = SEQ_NAME;
    
       DBMS_OUTPUT.PUT_LINE (SEQ_NAME || '>' || COUNT_NUMBER);
    
       IF COUNT_NUMBER = 0
       THEN
          --DBMS_OUTPUT.PUT_LINE('DROP SEQUENCE ' || SEQ_NAME);
          -- EXECUTE IMMEDIATE 'DROP SEQUENCE ' || SEQ_NAME;
          -- ELSE
          SELECT 'CREATE SEQUENCE COMPTABILITE.' || SEQ_NAME || ' START WITH ' || ROUND (DBMS_RANDOM.VALUE (100000000000, 999999999999), 0) || ' INCREMENT BY 1'
            INTO FINAL_QUERY
            FROM DUAL;
    
          DBMS_OUTPUT.PUT_LINE (FINAL_QUERY);
          cur_id := DBMS_SQL.OPEN_CURSOR;
          DBMS_SQL.parse (cur_id, FINAL_QUERY, DBMS_SQL.v7);
          DBMS_SQL.CLOSE_CURSOR (cur_id);
       -- EXECUTE IMMEDIATE FINAL_QUERY;
    
       END IF;
    
       COMMIT;
    END;
    /
    

提交回复
热议问题