2014-07-02 42 views
0

我在Teradata中使用立即执行时遇到了问题。在teradata的sql语句中立即执行字符串

SET str_sql = 'UPDATE TABLE 
        SET COLA = 0'; 
EXECUTE IMMEDIATE str_sql; 

上面的代码工作正常。

SET str_sql = 'UPDATE TABLE 
        SET COLA = 0, 
         COLB = ''test'''; 
EXECUTE IMMEDIATE str_sql; 

上述带字符串的代码返回错误。

以下是错误消息:

Executed as Single statement. Failed [3706 : 42000] Table:Syntax error: expected something between a string or a Unicode character literal and the word 'test'. 
Elapsed time = 00:00:00.212 

STATEMENT 1: CALL failed. 

任何人都知道如何调用与SQL字符串的立即执行? 谢谢!

Frank Liu

+1

你的代码是正确的,一个字符串中的单引号必须用两个单引号替换。所以这应该按原样运行。你能显示你的确切查询吗?还是完整的SP源? – dnoeth

+1

问题解决了。这里有两个单引号是正确的。这里的问题是因为在sql语句中输入的。它应该写在一行中或使用||在不同的行中连接字符串,如set str_sql ='update ....';设置str_sql = str_sql || 'set ...'; –

回答

0

问题可能出在报价上。而不是此

SET str_sql = 'UPDATE TABLE 
       SET COLA = 0, 
        COLB = ''test'''; 
EXECUTE IMMEDIATE str_sql; 

使用双引号。

SET str_sql = 'UPDATE TABLE 
       SET COLA = 0, 
        COLB = 'test''; 
EXECUTE IMMEDIATE str_sql; 
+0

我对这种编程语言并不熟悉,但我会猜想,双引号str_sql变量或转义单引号本来就是要走的路。 –

+0

双引号不起作用。 –

+0

试过扭转报价?单词'test'中的双引号在单引号之外。尝试了 – Charlesliam