ORA-18150: SQL input value cannot be modified in updating expression

文档解释

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;

你可能感兴趣的