2

最初にテーブルを作成しましょう

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はこれを達成する方法を助けますか?

4

4 に答える 4

5

値ごとに異なる変数を使用する必要があります

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;
于 2009-03-30T09:48:29.047 に答える
4

テーブルテストには2つの列があります。挿入するのは1つだけで、どの列に名前を付けていないため、「値が不十分」です。だからあなたは必要です:

INSERT INTO test (name) VALUES (data)

またはおそらくより良いのはIDを入れることです:

INSERT INTO test (id, name) VALUES (1, data)

または単に:

INSERT INTO test VALUES (1, data)

この種の場合は、動的SQL(またはインラインSQL)ではなくカーソルを使用します。

于 2009-03-30T09:47:19.080 に答える
3

動的 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;

これには、値ごとに 1 つの変数が必要です。

于 2009-03-30T11:02:14.390 に答える
0

あなたのアプローチは機能しますが、クエリを少し調整する必要があります。

execute immediate 'insert into test values(' || v_data|| ')';

値「v_data」自体ではなく、v_data 変数の内容が実際に文字列に挿入されるようにします。

于 2009-03-30T10:05:09.223 に答える