DECLARE
v_name A.TRANSACTION_TYPE%TYPE :='SALARY';
v_salary A.SALARY%TYPE := 1000;
BEGIN
update A set v_name= v_salary where EMPID = 517;
-- PL/SQL: ORA-00904: "v_name": invalid identifier
--update A set SALARY = 1000 where EMPID = 517;
END;
/
我的想法是更新表列,但这些列名存储在变量中。有没有办法从变量中传递列名?除了Execute Immediate
之外还有其他选择吗?答案 0 :(得分:0)
不确定这是否适用于您的情况,但我written solutions我在SQL Plus中写了一个脚本并且“写了”(使用dbms_output.put_line
甚至只是{{} 1}})另一个执行查询的脚本,这些查询中的列/表由SQL Plus脚本中的逻辑确定。然后我将作为脚本执行我的第一个脚本的输出,它将执行动态生成的查询,而不需要prompt
。
答案 1 :(得分:0)
以下想法可能适用于键入相同的多个列...如上所述,它将每次更新给定记录的所有列,但只有v_name
指定的列才会更改为v_value
中设置的值;其他列只是更新为其现有值。可以使用DECODE
,NVL
或其他类似的条件运算符来播放该想法。
declare
v_name varchar2(20):= 'SAL';
v_value emptest.sal%TYPE := 5000;
begin
update emptest
set sal = ( select case when v_name = 'SAL' then v_value else sal end from dual),
comm = ( select case when v_name = 'COMM' then v_value else comm end from dual)
where empno = 7369;
commit;
end;