12
返回列表 发新帖
楼主: Nicey_123

[原创] DB2存储过程能用动态sql执行类似oracle的匿名块吗????

[复制链接]
论坛徽章:
3
优秀写手
日期:2014-04-05 06:00:12慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39
11#
 楼主| 发表于 2014-11-7 10:14 | 只看该作者
komicakomica 发表于 2014-11-7 10:02
你有安装过toad吗?在那里可以执行。

我知道toad可以执行,我用的就是toad for db2 ,但是如果上生产了,没有toad,只有字符界面,想用db2 call()的方式,可以吗?

使用道具 举报

回复
论坛徽章:
5
慢羊羊
日期:2015-03-04 14:55:272015年新春福章
日期:2015-03-06 11:59:47喜羊羊
日期:2015-04-02 19:59:02懒羊羊
日期:2015-05-17 21:03:29懒羊羊
日期:2015-05-20 20:04:36
12#
发表于 2014-11-7 10:28 | 只看该作者
Nicey_123 发表于 2014-11-6 14:11
我想在问一下:
CREATE OR REPLACE PROCEDURE SRS.T (
        IN IN_ISSUE        VARCHAR(10),

输出参数那里用?代替。

使用道具 举报

回复
论坛徽章:
3
优秀写手
日期:2014-04-05 06:00:12慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39
13#
 楼主| 发表于 2014-11-11 11:31 | 只看该作者
komicakomica 发表于 2014-11-7 10:28
输出参数那里用?代替。

CREATE OR REPLACE PROCEDURE SRS.SP_JGBS_SUB_TRA_PARAM_MOD (
    IN P_ISSUE        VARCHAR(10),
    OUT P_RET        INTEGER,
    OUT P_MSG        VARCHAR(4000) )

在db2cmd里,执行:
C:\Documents and Settings\Administrator>db2 CALL SRS"."SP_JGBS_SUB_TRA_PARAM_MO
D"('20140930', '?','?')
SQL0469N  参数方式(IN、OUT 或 INOUT)对于带有特定名称
"SP_JGBS_SUB_TRA_PARAM_MOD"(参数号码 "2",名称 "P_RET")的过程
"SP_JGBS_SUB_TRA_PARAM_MOD" 中的参数无效。  SQLSTATE=42886

C:\Documents and Settings\Administrator>db2 CALL "SRS"."SP_JGBS_SUB_TRA_PARAM_MO
D"('20140930', ?,'?')
SQL0469N  参数方式(IN、OUT 或 INOUT)对于带有特定名称
"SP_JGBS_SUB_TRA_PARAM_MOD"(参数号码 "3",名称 "P_MSG")的过程
"SP_JGBS_SUB_TRA_PARAM_MOD" 中的参数无效。  SQLSTATE=42886

要怎么改呢??

使用道具 举报

回复
论坛徽章:
3
优秀写手
日期:2014-04-05 06:00:12慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39
14#
 楼主| 发表于 2014-11-11 11:33 | 只看该作者
komicakomica 发表于 2014-11-7 10:28
输出参数那里用?代替。

汗。。。。
是这样的。。
C:\Documents and Settings\Administrator>db2 CALL "SRS"."SP_JGBS_SUB_TRA_PARAM_MO
D"('20140930', ?,?)

  输出参数的值
  --------------------------
  参数名: P_RET
  参数值: 1

  参数名: P_MSG
  参数值: 报送追踪过程<SP_JGBS_SUB_TRA_PARAM_MOD>过程失败SQL0501N  FETCH 语句或
CLOSE 语句中指定的游标尚未打开,或者游标标量函数引用中的游标变量尚未打开。  SQL
STATE=24501

  返回状态 = 0

使用道具 举报

回复
论坛徽章:
5
慢羊羊
日期:2015-03-04 14:55:272015年新春福章
日期:2015-03-06 11:59:47喜羊羊
日期:2015-04-02 19:59:02懒羊羊
日期:2015-05-17 21:03:29懒羊羊
日期:2015-05-20 20:04:36
15#
发表于 2014-11-11 14:23 | 只看该作者
本帖最后由 komicakomica 于 2014-11-11 14:35 编辑
Nicey_123 发表于 2014-11-11 11:33
汗。。。。
是这样的。。
C:\Documents and Settings\Administrator>db2 CALL "SRS"."SP_JGBS_SUB_TRA_ ...

你可以尝试用存储过程返回结果集的方式来显示结果。
比如
CREATE OR REPLACE PROCEDURE SRS.SP_JGBS_SUB_TRA_PARAM_MOD (
     IN P_ISSUE        VARCHAR(10),
     OUT P_RET        INTEGER,
     OUT P_MSG        VARCHAR(4000) )
  DYNAMIC RESULT SETS 1
BEGIN
...
END
在过程体中打开游标不要关闭,存储过程结束后就会返回你打开游标中的结果集。
游标声明要加上WITH RETURN,例如
DECLARE
      C1 CURSOR WITH RETURN FOR
        STMT;

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表