当前位置: 首页 > 知识库问答 >
问题:

DB2更改表查询不支持内部存储过程

司马飞
2023-03-14

我正在尝试运行以下存储过程:

CREATE OR REPLACE PROCEDURE DATAMART.UPDATE_IDENTITY()
BEGIN
    DECLARE CONST_MESSAGE_ENTRY_KEY INTEGER;

    SET CONST_MESSAGE_ENTRY_KEY = (SELECT MAX(MESSAGE_ENTRY_KEY) FROM DATAMART.MESSAGE_ENTRIES_LOG);

    ALTER TABLE DATAMART.MESSAGE_ENTRIES_LOG ALTER COLUMN MESSAGE_ENTRY_KEY RESTART WITH CONST_MESSAGE_ENTRY_KEY;   
    
END;

我得到这个错误:

SQL错误[42601]:在“E_ENTRIES_LOG”之后发现意外的标记“ALTER”。预期的令牌可能包括:

“.SQLCODE=-104,SQLSTATE=42601,DRIVER=4.26.14

注意:如果我在不使用存储过程的情况下运行alter查询,它运行正常。

共有1个答案

桓深
2023-03-14

这是记录在案的行为。

对于Linux/Unix/Windows上的Db2,复合SQL(已编译)块不支持ALTER(作为静态语句)。

请参阅此处的文档。

如果要在SQL PL存储过程中运行ALTER语句,必须使用动态SQL(即prepare

 类似资料:
  • 我尝试使用 DB2 存储过程更改表。以下是我的代码。我在更改查询中发现了问题。但是同样的查询在 DB2 命令行编辑器中完美地执行了。我想使用存储过程运行相同的查询。请帮帮我。 错误:在“NTITY(以 69 开头)”之后发现意外的标记“语句结尾”。预期的令牌可能包括:“)”...SQLCODE=-104,SQL 状态=42601,驱动程序=3.58.81

  • 问题内容: 我想在sql查询中更改表的动态名称。例如,我有下一个存储过程: 我需要在运行时更改 tableName ,我可以这样做吗?谢谢。 问题答案: 您必须使用动态SQL来准备和执行SQL字符串,以实现您所描述的内容。 在准备之前,必须将动态表名称(或列名称或SQL关键字等)内插到SQL字符串中。您不能将查询参数用于这些动态元素。 当您将表名称插入到SQL查询中时,请小心避免SQL注入漏洞。例

  • 我试图使用RazorSQL客户端在DB2数据库中创建一个存储过程,但遇到了以下错误: 块引用错误:字符、标记或子句无效或丢失。DB2SQL错误:SQLCODE=-104, SQLSTATE=42601, SQLERRMC=SELECT 存储过程代码为:

  • 如果你有什么建议,我很想听听! 谢谢:)

  • 我正在使用 db2 和 S 松鼠 SQL 我试图创建一个存储过程,其中包含一个简单的select语句。当我省略下面的select语句并运行代码时,过程就创建好了。这个过程也可以被删除和调用。 当我添加select语句时,我得到错误:DB2 SQL错误:SQLCODE=-102,SQLSTATE=42601,... 如果你去IBM iseries信息中心,它会说: SQL0104 SQLCODE-1

  • 问题内容: 考虑以下查询。 两个查询的执行计划相同,并且同时执行。但是,我期望第二个查询将有不同的计划,并且执行速度会变慢,因为它必须从联系人中选择所有数据并应用过滤器。看来我错了。 我想知道这是怎么回事? 数据库服务器:SQL Server 2005 问题答案: 正在发生“查询优化器”。当您运行查询时,SQL Server使用基于成本的优化器来确定最有可能满足该请求(即执行计划)的最佳方法。将其