【发布时间】:2018-07-22 12:56:18
【问题描述】:
我想编写一个UPDATE 语句,根据用户的选择,每次运行的列数可能会有所不同。
例如:DDL
CREATE TABLE "XX_MASK_REF"
( "TABLE_NAME" VARCHAR2(150 BYTE),
"COLUMN_NAME" VARCHAR2(150 BYTE),
"FLAG" VARCHAR2(2 CHAR) DEFAULT 'N'
);
将一组预定义的表名和相应的列名插入到该表中。 FLAG 的默认值设置为“N”。用户根据自己的要求将 FLAG 设置为“Y”,每次运行都会有所不同。
示例数据:运行 1
Table_Name Column_Name Flag
T1 C1 Y
T1 C2 Y
T1 C3 N
T2 C1 N
T2 C2 Y
样本数据:运行 2
Table_Name Column_Name Flag
T1 C1 Y
T1 C2 N
T1 C3 N
T2 C1 N
T2 C2 Y
我需要一个 UPDATE 语句,它应该只对那些 FLAG 被 table_name 设置为 Y 组的列运行。从上面给出的数据集中,在Run 1 中,表T1 的列数为2,而在Run 2 中只有一列需要更新。
生成的更新语句应该能够更新表中所有可用的记录,这意味着不需要 where 子句。
要更新的值将在变量中可用。我打算使用 TRANSLATE 函数,通过该函数将值传递到要更新的列。
我认为这样的事情会帮助我
V_CHAR := 'Update' ||' ' ||V_TABLE_NAME||' ' || 'Set' ||' ' || V_COLUMN_NAME||'='||' ' || 'TRANSLATE('||V_COLUMN_NAME||', '1234567890','abcdefghijk')
如果我遗漏了什么或不清楚的地方,请告诉我
【问题讨论】:
-
更新值从何而来?过滤条件从何而来?
-
请检查我的回答并接受它是否对您有帮助或为给定的解决方案提供相关反馈(cmets)。请阅读:stackoverflow.com/help/someone-answers 了解为什么它很重要。
标签: plsql dynamic-sql