文档解释
ORA-18150: SQL input value cannot be modified in updating expression
Cause: Updating expression was specified as top-level XMLQuery expression.
Action: Use XQuery TRANSFORM expression to copy input value and modify it.
ORA-18150是由Oracle数据库引擎发出的一条错误信息,指在更新表达式中不能修改 SQL输入值,发生此错误原因一般为输入的SQL语句中字段加了运算符而不是特定的值。
官方解释
ORA-18150:报错信息指当在一个语句(如:update或insert)中使用了SQL输入时,尝试对其值进行修改时会报此错误。
常见案例
案例1:
CREATE OR REPLACE PROCEDURE proc_test AS
num_val NUMBER;
BEGIN
SELECT a INTO num_val FROM dual;
UPDATE tbl_a SET b = num_val *5 WHERE c > 10;
END
这条例子中,当在update语句中尝试用num_val乘以5,Oracle将报ORA-18150错误,因为你不能给num_val变量赋值。
案例2:
SELECT deptno,
SUM (sal)
INTO l_deptno, l_pre_sum
FROM emp
WHERE deptno = 11
GROUP BY deptno;
UPDATE emp
SET sal = l_deptno *50
WHERE deptno = 11;
在这个例子中,当尝试执行update语句时,Oracle将报ORA-18150错误,因为l_deptno变量不能被修改。
一般处理方法及步骤
处理此类ORA-18150错误的正常方法是避免使用SQL里的变量来更新表达式的值,而是使用特定的值。
例如:
UPDATE emp
SET sal = 11 *50
WHERE deptno = 11;