背景: 在存储过程中执行动态sql,提示权限不足。 但单独执行插入数据的sql是能够正常执行的。
解决方案: 在存储过程声明的地方加上“AUTHID current_user”
没有AUTHID CURRENT_USER表示定义者权限(definer rights),以定义者身份执行;
加上AUTHID CURRENT_USER表示调用者权限(invoker rights),以调用者身份执行。
CREATE OR REPLACE PROCEDURE pro_retrieval_basic_data (
o_code OUT NUMBER
) AUTHID current_user AS --AUTHID current_user 解决执行动态sql时的权限不足问题
v_sql VARCHAR2(3800); --检索数据的sql
v_curr_datetime NUMBER(14); --当前时间
BEGI
v_sql := 'INSERT INTO Order_Qc_Result (
id, Create_Time, Update_Time)
SELECT
sys_guid(), :createtime, :updatetime
FROM table_name';
v_curr_datetime := to_char(SYSDATE, 'yyyymmddhh24miss');
-- 执行动态sql,并绑定变量值
EXECUTE IMMEDIATE v_sql USING v_curr_datetime, v_curr_datetime;
o_code := 0;
END pro_retrieval;