我正在尝试在游标中使用更新语句,但表名(和列名)等值会随着从游标中获取的每条记录而变化。我将表名和列名存储在表中,并将它们用作更新语句的参数。每次循环游标时,我都会使用 update 语句初始化一个变量。 我的问题是,如何执行存储在变量中的更新语句。我想在游标中的每个循环中执行更新语句。
谢谢。
我一直在用 update 语句初始化一个变量。 lv_update_statement := '更新 scpomgr。'|| lv_表名 || '设置' || lv_param_name || ' = ' || lv_param_value || ' 其中项目 = ' || lv_项目|| ' 和 loc = ' || lv_loc || ';';
使用
EXECUTE IMMEDIATE
和字符串连接作为标识符,并使用绑定变量作为值(并且不要在语句中包含 ;
终止符):
BEGIN
FOR rw IN (
SELECT table_name,
param_name,
param_value,
item_value,
loc_value
FROM your_table
)
LOOP
EXECUTE IMMEDIATE 'update scpomgr.'|| rw.table_name
|| ' set ' || rw._param_name || ' = :1'
|| ' where item = :2'
|| ' and loc = :3'
USING rw.param_value, rw.item_value, rw.loc_value;
END LOOP;
END;
/