Oracle PL - SQL - "SQL command not properly ended" 更新语句

Oracle PL - SQL - "SQL command not properly ended" on an update statement

我有两个由 "Execute Immediate" 函数启动的更新语句。一个工作正常,但另一个抛出 "SQL command not properly ended" 错误。

声明工作正常:

 EXECUTE IMMEDIATE 'UPDATE myTable SET column_xpto = ' ||my_var|| ' WHERE myTable.name_table = '''||nameT||'''';

语句不工作:

EXECUTE IMMEDIATE 'UPDATE myTable SET column_X = ' ||my_other_var|| ' WHERE myTable.name_table = '''||nameT||'''';

变量'my_var'是NUMBER类型,而变量'my_other_var'是时间戳(6),用CURRENT_TIMESTAMP初始化。

desc myTable 
Name             Null     Type          
---------------- -------- ------------- 
NAME_TABLE       NOT NULL VARCHAR2(200) 
column_xpto               NUMBER              
column_X                  TIMESTAMP(6)

有谁知道为什么第二个语句会报错?

你必须像下面这样使用

EXECUTE IMMEDIATE 'UPDATE myTable SET column_X = ''' ||my_other_var|| ''' WHERE myTable.name_table = '''||nameT||'''';

因为 timestamp 应该用作字符串文字。

您也可以像 Lalith 所说的那样用户绑定变量。

我会像下面那样使用 bind 变量,使用 USING 关键字。

EXECUTE IMMEDIATE 'UPDATE myTable SET column_xpto = :my_other_var WHERE myTable.name_table = :nameT' 
        USING my_other_var, nameT;