[英]How to insert dynamically through a variable in PL/SQL?
让我们先创建一个表
create table test
(
id number,
name varchar2(20)
);
现在在插入过程中,我想先将数据保存到变量中,然后将变量动态传递给VALUES子句,如下所示:
declare
v_data varchar2(50);
begin
v_data:='1,sunny';
execute immediate 'insert into test values(v_data)';
commit;
end;
但是它显示出一些错误(没有足够的值)……请帮助实现这一目标?
表测试有两列。 您只插入一个,而不是命名哪个列,因此“值不足”。 因此,您需要:
INSERT INTO test (name) VALUES (data)
或者最好输入一个ID:
INSERT INTO test (id, name) VALUES (1, data)
或者简单地:
INSERT INTO test VALUES (1, data)
对于这种事情,尽管我会使用游标而不是动态SQL(甚至是内联SQL)。
您需要为每个值使用不同的变量
declare
v_data1 number
v_data2 varchar2(50);
begin
v_data1 :=1
v_data2 = 'sunny';
insert into test values(v_data1,v_data2);
-- Alternatively insert into test (Name) values (v_data2);
commit;
end;
将值传递到动态SQL语句中的常规方法是使用绑定变量,如下所示:
declare
v_id integer;
v_name varchar2(50);
begin
v_id := 1;
v_name := 'sunny';
execute immediate
'insert into test (id, name) values(:b1, :b2)'
using v_id, v_name;
commit;
end;
每个值需要一个变量。
您的方法可行,但您需要稍微调整一下查询:
execute immediate 'insert into test values(' || v_data|| ')';
以便将v_data变量的内容实际插入字符串中,而不是值“ v_data”本身。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.