[英]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.