让我们先创建一个表
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;
但是它显示出一些错误(没有足够的值)...... plz帮助如何实现这个?
答案 0 :(得分:4)
表测试有两列。你只是插入一个而不是命名它是哪个列,因此“没有足够的值”。所以你需要:
INSERT INTO test (name) VALUES (data)
或者可能更好的是输入ID:
INSERT INTO test (id, name) VALUES (1, data)
或简单地说:
INSERT INTO test VALUES (1, data)
虽然我会使用游标而不是动态SQL(甚至是内联SQL)。
答案 1 :(得分:2)
您需要为每个值使用不同的变量
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;
答案 2 :(得分:2)
将值传递给动态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;
每个值需要一个变量。
答案 3 :(得分:0)
您的方法有效,但您需要稍微调整一下您的查询:
execute immediate 'insert into test values(' || v_data|| ')';
以便v_data变量的内容实际插入到字符串中,而不是值“v_data”本身。