【发布时间】:2017-06-08 06:05:15
【问题描述】:
我正在尝试在包含 with/recursive 语句的 Teradata 数据库上创建一个过程,当我 CALL 该过程时,它给了我错误 "Expected something like a name or Unicode delimited identifier between ( and )"。我删除了所有不产生错误的代码,剩下的是:
REPLACE PROCEDURE
--CALL
db.test()
BEGIN
-- calling proc bombs instead of inserting, running outside called proc ok
INSERT INTO db.tbl_lProcModKey
WITH b AS (
SELECT TransactionControlNumber, ClaimLineNo, modifier
FROM db.tbl_lMod)
SELECT TransactionControlNumber, ClaimLineNo, NULL AS modKey FROM b;
END
在过程之外执行 SQL 助手中的代码运行正常。我假设这是我们在 VERSION 14.10.07.08 上的数据库的预期行为,但是是否有另一种方法可以将此类函数包含在计划进程中?我们希望尽可能使用 SSIS 包调用数据库上的代码,限制进入包的代码量。
感谢您提供的任何帮助。
【问题讨论】:
-
我知道在旧版本的 SP 中不支持 WITH 子句,但我不记得它是什么时候添加的。显然在 14.10 之后 :( 当然你可以使用派生表重写它,除非它是 WITH RECURSIVE,但是你可以考虑将 SELECT 存储为递归视图。
-
或者你也可以只嵌套选择
标签: stored-procedures teradata