环境信息:
数据库版本:hgdbv9.0.5
安装包名称:hgdbv9-05-0-0-5022-20251223-a09fff4-linux.x86_64.bin
场景描述:
存储过程中存在COMMIT的时候,通过其他有权限的用户(非所有者)调用报错,报错信息如下:
> ERROR: invalid transaction termination CONTEXT: PL/iSQL function update_dept_salary(number,number) line 7 at COMMIT
|
解决方案:
指定AUTHID 值为 CURRENT_USER ,默认是 DEFINER
修改前:
CREATE OR REPLACE PROCEDURE exam.update_dept_salary ( p_dept_id IN NUMBER, p_raise_pct IN NUMBER ) AUTHID CURRENT_USER IS v_emp_count NUMBER; BEGIN UPDATE employees SET salary = salary * (1 + p_raise_pct / 100) WHERE department_id = p_dept_id; v_emp_count := SQL%ROWCOUNT; COMMIT; DBMS_OUTPUT.PUT_LINE('成功更新并提交了 ' || v_emp_count || ' 名员工的薪资。'); END update_dept_salary; /
|
修改后:
CREATE OR REPLACE PROCEDURE exam.update_dept_salary ( p_dept_id IN NUMBER, p_raise_pct IN NUMBER ) AUTHID CURRENT_USER IS v_emp_count NUMBER; BEGIN UPDATE employees SET salary = salary * (1 + p_raise_pct / 100) WHERE department_id = p_dept_id; v_emp_count := SQL%ROWCOUNT; COMMIT; DBMS_OUTPUT.PUT_LINE('成功更新并提交了 ' || v_emp_count || ' 名员工的薪资。'); END update_dept_salary; /
|