它应该是这样的:
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 完全是多余的)。IE
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;
/
(不知道为什么你在两列中有相同的字符串)。在这种简单的情况下没有动态 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 (...)
稍后有人添加具有默认值的列一样,您的代码将中断。