Stored procedures Teradata过程中包含With语句

Stored procedures Teradata过程中包含With语句,stored-procedures,teradata,Stored Procedures,Teradata,我试图在Teradata数据库上创建一个过程,该过程包含一个with/recursive语句,当我调用该过程时,它会给我一个错误“期望在(和)之间有一个名称或Unicode分隔的标识符”。我删除了所有不产生错误的代码,剩下的是: REPLACE PROCEDURE --CALL db.test() BEGIN -- calling proc bombs instead of inserting, running outside called proc ok INSERT INTO db.tbl

我试图在Teradata数据库上创建一个过程,该过程包含一个
with/recursive
语句,当我
调用该过程时,它会给我一个错误
“期望在(和)之间有一个名称或Unicode分隔的标识符”
。我删除了所有不产生错误的代码,剩下的是:

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 Assistant中执行代码运行正常。我假设这是我们14.10.07.08版数据库的预期行为,但是否有其他方法将此类函数包含在计划进程中?我们希望尽可能多地使用SSIS包调用数据库上的代码,从而限制输入到包中的代码量


感谢您提供的帮助。

WITH
在存储过程中不受支持,即使在较新版本中也是如此。以下是16.10文档(“SQL数据操作语言”)的摘录:

不能在以下任何数据库对象的定义中指定WITH或WITH RECURSIVE语句修饰符:

∘ 视图和递归视图

∘ 触发

∘ 存储过程

∘ 派生表


存储过程中不支持使用
,即使在较新版本中也是如此。以下是16.10文档(“SQL数据操作语言”)的摘录:

不能在以下任何数据库对象的定义中指定WITH或WITH RECURSIVE语句修饰符:

∘ 视图和递归视图

∘ 触发

∘ 存储过程

∘ 派生表


我知道旧版本的SPs中不支持WITH子句,但我记不起它是何时添加的。显然在14.10之后:(当然可以使用派生表重写它)除非它是递归的,否则你可以考虑将select存储为递归视图。或者你也可以嵌套选择SistTi知道在旧版本中SPS中不支持with子句,但是我不能记住它是什么时候添加的。在14.10之后出现(当然,你可以使用派生表)重写它。除非它是递归的,否则你可以考虑将SELECT存储为递归视图。或者你也可以在文档中嵌套选择为一个bug:-为什么?为什么?我只是尝试在一个过程中使用<代码> > <代码>,它没有编译,但没有程序运行。(我没有太多时间来检查是否存在其他问题,但我怀疑)。我使用Teradata 16.10。你是对的:-(我从未在SP或触发器中需要它,但至少16.00允许在视图和派生表中使用CTE,这似乎是文档中的一个缺陷:-)@dnoeth为什么?我刚刚尝试在一个过程中使用query with
with
,但它没有编译,但没有过程它可以工作(我没有太多时间检查是否存在其他问题,但我怀疑)。我在Teradata 16.10上工作。你是对的:-(我从未在SP或触发器中需要它,但至少16.00允许在视图和派生表中使用CTE