次のようになります。
DECLARE
v_RULE_NAME VARCHAR2(200):='ABC';
v_user_id NUMBER:=2;
begin
execute immediate 'INSERT INTO BW_TXS
VALUES (TXN_ID.NEXTVAL,'||v_user_id||',SYSDATE,''super '||v_RULE_NAME
||''',''super '||v_RULE_NAME||''')';
end;
/
ただし、動的 SQL を使用する場合は、バインド変数を使用してください (ただし、この単純なケースでは、動的 SQL は完全にやり過ぎです)。すなわち
DECLARE
v_RULE_NAME VARCHAR2(200):='ABC';
v_user_id NUMBER:=2;
begin
execute immediate 'INSERT INTO BW_TXS
VALUES (TXN_ID.NEXTVAL,:userid,SYSDATE,:rule, :rule)'
using v_user_id, 'super ' || v_rule_name, 'super ' || v_rule_name;
end;
/
(2 つの列に同じ文字列がある理由がわからない)。この些細なケースで動的 SQL を使用しない場合は、次の場合に可能です。
DECLARE
v_RULE_NAME VARCHAR2(200):='ABC';
v_user_id NUMBER:=2;
begin
INSERT INTO BW_TXS
VALUES (TXN_ID.NEXTVAL,v_user_id,SYSDATE, 'super ' || v_rule_name,
'super ' || v_rule_name);
end;
/
insert into bw_txt (a, b, c, d..) values (...)
また、後で誰かがデフォルト値で列を追加した場合と同じように、挿入で列名を常に定義する必要があります。コードは壊れます。