oracle - 是否可以在没有动态 sql 的情况下将变量列名传递给 ORACLE 更新语句
问题描述
UPDATE P_ATTR
SET XC=ATTR_VAL,
SYS_MODIFIED_BY =UPPER(TRIM(USER_ID)),
SYS_MODIFIED_DATE =SYSDATE
WHERE ID_1 IN (SELECT ID_1
FROM EMP_MSTR
WHERE UPPER(x_SQL)= UPPER(LOC)
AND UPPER(LOC_CD)=UPPER('IND'));
收到错误信息:
PL/SQL:ORA-00904:“XC”:无效标识符
解决方案
不,没有动态 SQL 是不可能的。但是,您可以编写静态更新语句来解释变量的值并更新正确的列。像这样:
(假设“XC”是一个 PL/SQL 变量。如果您不在 PL/SQL 中,则需要一个绑定变量,因此将每次出现的“XC”替换为“:XC”。与“ATTR_VAL”处理相同。)
UPDATE P_ATTR
SET
COLUMN_1 = DECODE(XC,'COLUMN_1',ATTR_VAL,COLUMN_1),
COLUMN_2 = DECODE(XC,'COLUMN_2',ATTR_VAL,COLUMN_2),
COLUMN_3 = DECODE(XC,'COLUMN_3',ATTR_VAL,COLUMN_3),
COLUMN_4 = DECODE(XC,'COLUMN_4',ATTR_VAL,COLUMN_4),
...
SYS_MODIFIED_BY =UPPER(TRIM(USER_ID)),
SYS_MODIFIED_DATE =SYSDATE
WHERE ID_1 IN( SELECT ID_1
FROM EMP_MSTR
WHERE UPPER(x_SQL)= UPPER(LOC)
AND UPPER(LOC_CD)=UPPER('IND'));
推荐阅读
- css - 调整背景图像的大小以适合容器
- javascript - 使用 axios et 调用的响应更新 jsx
- raspberry-pi - 如何使用电子生成器和 raspbian 在电子中构建应用程序?
- c++ - 在 C++ 中创建人类可读的时间戳并存储在字符串中
- php - 使用 PHP 使用 post 变量卷曲 json 结果
- javascript - 我在 JS 中重构了一些代码,我需要 su 这个数组中的值,填充字符、布尔值、数字、对象和数组
- asp.net-core - 我如何在我的 asp.net 核心 mvc Web 应用程序中将 Authorize 属性限制为仅限某些用户
- python - python 3导入所有包与一部分
- python - 在 python 中,写什么来获取 (data-brand-name) 的值
- domain-driven-design - 从多个数据库填充聚合根