【问题标题】:DB2 simple Select SPDB2 简单选择 SP
【发布时间】:2021-03-24 07:22:36
【问题描述】:

我尝试让一个 SP 在与 Squirrel 连接的 DB2 上运行

CREATE OR REPLACE PROCEDURE BOCA.TESTSP
(IN CASID INTEGER)
 READS SQL DATA
 DETERMINISTIC
LANGUAGE SQL
BEGIN 
 SELECT * FROM BOCA.TCASE C WHERE C.ID = CASID
END;

根据我放置 ; 的位置,我得到了各种错误(在语句的末尾等)

我尝试采用这种方法:

CREATE PROCEDURE [qualifier.]<procedure_name>
([IN | OUT | INOUT <argument_name> <datatype>,...])
{MODIFIES SQL DATA |
 NO SQL |
 CONTAINS SQL |
 READS SQL DATA}
[[NOT] DETERMINISTIC]
LANGUAGE SQL
BEGIN [ATOMIC]
  <procedure_body>
END

但是没有成功。 有人有一个简单的选择吗?

Stnge 是我能够创建的示例更新

【问题讨论】:

  • SP 是复合语句。您必须: 1. 将默认语句终止字符; 更改为另一个类似@ 的字符(在Squirrel 或您使用的任何工具中查找它的位置)并在外部END 之后使用它。 2. 用;关闭SP里面的每一条语句。

标签: stored-procedures db2


【解决方案1】:

花一些时间研究 IBM 为 SQL PL 过程提供的示例代码,构建这些示例并在您的环境中运行。示例位于文档中,也位于 github 上,也位于 Db2 服务器安装的 SAMPLES 目录中(适用于 Linux/Unix/Windows 上的 DB2)。

你的程序有一些错误:

  • SELECT 语句后缺少语句分隔符
  • 例程中 SELECT 的使用不正确。您或者想要声明并打开一个游标以将结果集返回给调用者或客户端,或者您想要使用 SELECT...INTO 在您的例程中处理查询结果。
  • 在代码块末尾缺少有效的分隔符(在最后的 END 之后)

对于SQuirrel SQL Client,在连接数据库之前:

File > New Session Properties > SQL

(scroll down the list of properties until you see:
Statement Separator ;

Change the Statement Separator to @
Click OK.

现在连接到数据库。

当您在 Squirrel(或块,例如触发器、存储过程、用户定义函数等)中键入任何 SQL 语句时,您现在必须使用新的语句分隔符而不是以前的默认值 at整个语句的结尾

在您的例程中,您仍然需要使用分号来分隔语句inside,但请记住在块的末尾指定新的语句分隔符(在最后的 END 之后您的情况下的存储过程)。

【讨论】:

    猜你喜欢
    • 2016-05-12
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2017-06-09
    • 2015-08-24
    • 2014-09-30
    相关资源
    最近更新 更多