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;
我有两个由 "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;