【发布时间】:2021-06-01 01:07:12
【问题描述】:
我读到(并尝试过)我不能在 DB2 存储过程中使用 WITH UR。有人告诉我,我可以使用 SET OPTION 来达到同样的效果。但是,当我在我的存储过程中实现它时,它无法编译(我在它的位置移动了同样的错误)。我的问题是:
- 我真的不能在过程中的 SELECT 语句之后使用 WITH UR 吗?
- 为什么我的存储过程无法编译并出现以下错误 留言?
这是我的代码的简化版本:
CREATE OR REPLACE PROCEDURE MySchema.MySampleProcedure()
DYNAMIC RESULT SETS 1
LANGUAGE SQL
SET OPTION COMMIT=*CHG
BEGIN
DECLARE GLOBAL TEMPORARY TABLE TEMP_TABLE AS (
SELECT 'testValue' as "Col Name"
) WITH DATA
BEGIN
DECLARE exitCursor CURSOR WITH RETURN FOR
SELECT *
FROM SESSION.TEMP_TABLE;
OPEN exitCursor;
END;
END
@
Error Message:
SQL0104N 发现意外的标记“SET OPTION COMMIT=*CHG” 遵循“语言 SQL”
这是我使用 WITH UR
时的代码/错误CREATE OR REPLACE PROCEDURE MySchema.MySampleProcedure()
LANGUAGE SQL
DYNAMIC RESULT SETS 1
--#SET TERMINATOR @
BEGIN
DECLARE GLOBAL TEMPORARY TABLE TEMP_TABLE AS (
SELECT UTI AS "Trade ID" FROM XYZ WITH UR
) WITH DATA;
BEGIN
DECLARE exitCursor CURSOR WITH RETURN FOR
SELECT *
FROM SESSION.TEMP_TABLE;
OPEN exitCursor;
END;
END
@
第 9 行是 DECLARE GLOBAL TEMPORARY ... 所在的位置
DB21034E 该命令被作为 SQL 语句处理,因为它是 不是有效的命令行处理器命令。在 SQL 处理期间 返回:SQL0109N 未处理语句或命令,因为 以下子句在其所在的上下文中不受支持 使用:“隔离使用并保持”。行号=9。 SQLSTATE=42601
【问题讨论】:
-
Db2 的哪个平台(i series/AS400、Z/OS 或 Linux/Unix/Windows?在寻求 Db2 方面的帮助时,您必须始终提供此信息。
-
Linux/Windows (DB2 LUW 8.x)
标签: sql stored-procedures db2 db2-luw isolation-level