Oracle 获取错误ORA-00933并执行即时更新

Oracle 获取错误ORA-00933并执行即时更新,oracle,plsql,Oracle,Plsql,我必须编写一个函数来编辑任务的预定义特征。我使用的是executeimmediate,但出现以下错误: > Error report - ORA-00933: SQL command not properly ended ORA-06512: at "C##U1519.BEARBEITE", line 7 ORA-06512: at line 2 00933. 00000 - "SQL command not properly ended" 这是我的密码 create or replac

我必须编写一个函数来编辑任务的预定义特征。我使用的是
executeimmediate
,但出现以下错误:

> Error report -
ORA-00933: SQL command not properly ended
ORA-06512: at "C##U1519.BEARBEITE", line 7
ORA-06512: at line 2
00933. 00000 - "SQL command not properly ended"
这是我的密码

create or replace procedure bearbeite(Aufg_ID Aufgabe.Aufgaben_ID%TYPE, Eigenschaft VARCHAR2, Wert VARCHAR2)
as
  sql_query_string2 VARCHAR2(4000);
begin 
  --überprüfen 
  sql_query_string2 := 'UPDATE Aufgabe SET ' || Eigenschaft || ' = ' || Wert || ' where Aufgabe.Aufgaben_ID = ' || Aufg_ID;
  EXECUTE IMMEDIATE sql_query_string2;

exception
  when no_data_found then
      dbms_output.put_line('Kein Wert');
end;


-- test
set serveroutput on
begin
  bearbeite(1,'Ort','TH WILDAU');
end;

我应该怎么做才能让它工作?提前感谢

您应该用单引号将
varchar2
参数括起来。。。pl/sql中的哪个应该转义并成为“”


sql_query_string2:=“UPDATE Aufgabe SET”| | Eigenschaft | | |”=“Wert | |”“”“where Aufgabe.Aufgaben_ID=”| | Aufg_ID

您应该将
varchar2
参数用单引号括起来。。。pl/sql中的哪个应该转义并成为“”


sql_query_string2:=“UPDATE Aufgabe SET”| | Eigenschaft | | |”=“Wert | |”“”“where Aufgabe.Aufgaben_ID=”| | Aufg_ID

将值转储到查询字符串中是危险的。最明显的危险是SQL注入,但这在许多情况下并不适用(用户输入可能已经有了控件)。更大的问题是意外的语法错误。我肯定不止一个人在生成查询字符串时遇到过像
O'Neil
这样的名字,这对他们不利

我强烈建议使用参数。这在Oracle中很简单:

sql_query_string2 := 'UPDATE Aufgabe SET ' || Eigenschaft || ' = :1 where Aufgabe.Aufgaben_ID = :2';
EXECUTE IMMEDIATE sql_query_string2 USING Wert, Aufg_ID;
这也意味着您不必担心是否使用单引号

参数可以命名,而不是编号


遗憾的是,您不能为SQL标识符使用参数——表名、模式名、列名、函数、关键字。因此,列名必须合并到字符串中。

将值转储到查询字符串中是危险的。最明显的危险是SQL注入,但这在许多情况下并不适用(用户输入可能已经有了控件)。更大的问题是意外的语法错误。我肯定不止一个人在生成查询字符串时遇到过像
O'Neil
这样的名字,这对他们不利

我强烈建议使用参数。这在Oracle中很简单:

sql_query_string2 := 'UPDATE Aufgabe SET ' || Eigenschaft || ' = :1 where Aufgabe.Aufgaben_ID = :2';
EXECUTE IMMEDIATE sql_query_string2 USING Wert, Aufg_ID;
这也意味着您不必担心是否使用单引号

参数可以命名,而不是编号


遗憾的是,您不能为SQL标识符使用参数——表名、模式名、列名、函数、关键字。因此,列名必须合并到字符串中。

错误消息是什么?我们猜不到。错误信息是什么?我们猜不到。