Oracle:动态 SQL 更新不工作
Oracle: Dynamic SQL with Update not working
我有这个说明
UPDATE TABLE1
SET INC =
(select INC from TABLE2
WHERE KEY = 'KEY_VALUE1'
FETCH FIRST 1 ROW ONLY);
如果我从 sqlPlus 运行 或者如果我在 PLSQL 中使用,这工作正常但是,如果我在动态 SQL 中使用,则不工作
sqlStmt:= 'UPDATE TABLE1'
|| 'SET INC = '
|| '(select INC from TABLE2 '
|| 'WHERE KEY = ''' || v_key_value || ''' '
|| 'FETCH FIRST 1 ROW ONLY); ';
BEGIN
EXECUTE IMMEDIATE sqlStmt;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('{"errorcode":"' || SQLERRM);
ROLLBACK;
END;
此指令return此错误:
{"errorcode":"ORA-00933: comando SQL terminato erroneamente
有人能帮帮我吗?
此致,
马可
您不希望在构建并传递给 execute immediate
的字符串末尾有分号。
这不是您出错的原因。但是使用绑定变量而不是连接文字来编写它对数据库来说要好得多。当然,由于没有理由对这种 update
语句使用动态 SQL,我猜你的实际用例是不同的,你实际上使用的是绑定变量 and/or 实际上绑定变量不是一个选项是有原因的。
我有这个说明
UPDATE TABLE1
SET INC =
(select INC from TABLE2
WHERE KEY = 'KEY_VALUE1'
FETCH FIRST 1 ROW ONLY);
如果我从 sqlPlus 运行 或者如果我在 PLSQL 中使用,这工作正常但是,如果我在动态 SQL 中使用,则不工作
sqlStmt:= 'UPDATE TABLE1'
|| 'SET INC = '
|| '(select INC from TABLE2 '
|| 'WHERE KEY = ''' || v_key_value || ''' '
|| 'FETCH FIRST 1 ROW ONLY); ';
BEGIN
EXECUTE IMMEDIATE sqlStmt;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('{"errorcode":"' || SQLERRM);
ROLLBACK;
END;
此指令return此错误:
{"errorcode":"ORA-00933: comando SQL terminato erroneamente
有人能帮帮我吗?
此致, 马可
您不希望在构建并传递给 execute immediate
的字符串末尾有分号。
这不是您出错的原因。但是使用绑定变量而不是连接文字来编写它对数据库来说要好得多。当然,由于没有理由对这种 update
语句使用动态 SQL,我猜你的实际用例是不同的,你实际上使用的是绑定变量 and/or 实际上绑定变量不是一个选项是有原因的。