在 teradata 的 sql 语句中使用字符串立即执行

Posted

技术标签:

【中文标题】在 teradata 的 sql 语句中使用字符串立即执行【英文标题】:execute immediate with string in sql statement in teradata 【发布时间】:2014-07-02 02:25:33 【问题描述】:

我在 Teradata 中使用立即执行时遇到了问题。

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 中使用 String 调用执行立即数吗? 谢谢!

弗兰克·刘

【问题讨论】:

您的代码是正确的,字符串中的单引号必须替换为两个单引号。所以这应该按原样运行。你能显示你的确切查询吗?还是完整的 SP 源? 问题已解决。它的两个单引号在这里是正确的。这里的问题是因为 sql 语句中的输入。它应该写在一行中或使用 ||连接不同行中的字符串,例如 set str_sql = 'update .... ';设置 str_sql = str_sql || '设置...'; 【参考方案1】:

问题可能出在报价单上。而不是这个

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;

【讨论】:

我不熟悉这种编程语言,但我猜双引号 str_sql 变量或转义单引号会是要走的路。 试过颠倒引号吗?双引号在单词test 的外部和单引号内。 试过了,但是看起来 teradata 只支持字符串的单引号。

以上是关于在 teradata 的 sql 语句中使用字符串立即执行的主要内容,如果未能解决你的问题,请参考以下文章

如何在(Teradata)仅使用 ANSI SQL 时实现重置?

在 Teradata 中创建具有“with recursive”语句的递归视图

如何在 Teradata SQL 中使用 LEFT JOIN 对查询中的非聚合参数进行 GROUP BY?

Teradata 工具使用SQL Assistant连接每次都需要重新输入口令

为啥 MS-Access 中的 Teradata 查询比 SQL Server 更快

在 Teradata SQL 中查找给定列的哪些行具有不同的值