Plsql 使用executeimmediate插入一行
下面的pl/sql显示错误,原因是引号。你能帮忙吗?你能告诉我如何写这种类型的查询吗Plsql 使用executeimmediate插入一行,plsql,oracle11g,Plsql,Oracle11g,下面的pl/sql显示错误,原因是引号。你能帮忙吗?你能告诉我如何写这种类型的查询吗 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
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;
谢谢不需要立即执行。这是PL/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', 'super', v_RULE_NAME);
应该是这样的:
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完全是多余的)。i、 e
(不确定为什么两列中有相同的字符串)。在这种简单的情况下,如果没有动态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中定义列名,如
插入bw_txt(a,b,c,d…)值(…)
,就好像有人稍后添加了一个带有默认值的列,您的代码将中断一样。我不知道为什么,但我发现我必须在块中换行,否则我只收到了一些错误消息:
execute immediate '
begin
insert into something.SomethingElse (...)
values (SYSDATE,''1.58.0.0'',''f1a87dfbe1ba'',1,null);
end;';
我收到的错误消息是:
Error report:
ORA-00933: SQL command not properly ended
ORA-06512: at line 14
00933. 00000 - "SQL command not properly ended"
是的!执行成功。非常感谢。可以使用绑定变量重写查询吗。你能解释一下绑定变量的用途吗。因为我需要将代码从sql server迁移到oracle,但我对oracle世界还是新手。需要帮助。@user1990383上面显示的是绑定的。使用绑定变量(a)可防止sql注入攻击(b)可防止使用类似的sql语句淹没共享池[即,它们可提高性能并防止可能的共享池内存错误](c)可减少由于过度硬解析而导致的机箱CPU负载。除非需要,否则不要使用动态SQL(静态SQL速度更快,在使用静态SQL时您不必担心绑定变量OK,谢谢您的回答。真的,我很想知道,因为知道我的人总是在我身后,但不知道您正在帮助的人,他们对帮助不感兴趣。上帝保佑您。删除符号“;”刑满
Error report:
ORA-00933: SQL command not properly ended
ORA-06512: at line 14
00933. 00000 - "SQL command not properly ended"