AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 52420
Accepted
ajeh
ajeh
Asked: 2013-10-30 06:49:02 +0800 CST2013-10-30 06:49:02 +0800 CST 2013-10-30 06:49:02 +0800 CST

未从 iSeries DB2 SQL 存储过程获取 SSRS 2008r2 中的结果集

  • 772

在阅读了 DB2 UDB for iSeries SQL Programming Concepts V5R2 的“定义 SQL 过程”部分和 i5/OS 信息中心第 5 版第 4 版的“从存储过程返回结果集”部分后,我创建了以下存储过程:

CREATE PROCEDURE TESTDAT.REPORT (IN DATESTART DATE, IN DATEEND DATE)
LANGUAGE SQL READS SQL DATA
BEGIN
    DECLARE CSR1 CURSOR WITH RETURN FOR
    SELECT *
    FROM  SYSIBM.SYSDUMMY1;

    OPEN CSR1;
    RETURN;
END

接下来,我阅读了同一 i5/OS 信息中心第 5 版第 4 版的“示例 1:调用返回单个结果集的存储过程”部分,并尝试从 SqlDbx 客户端(通过 ODBC)或 SSRS 报告(通过IBMDASQL 提供程序)使用以下语句:

CALL TESTDAT.REPORT (DATE('11/01/2013'), DATE('11/03/2013'));

它执行成功,但没有返回结果集。通过 iSeries 导航器成功执行此操作返回 2 个语句 - 选择和声明游标。打电话

SELECT * FROM  SYSIBM.SYSDUMMY1;

返回具有 1 行“Y”的 IBMREQD 列。我从上面的文件中遗漏了什么?

更新:

此过程生成的 SQL 包括除了已经讨论过的其他选项:

SPECIFIC TESTDAT.REPORT 
NOT DETERMINISTIC 
READS SQL DATA 
CALLED ON NULL INPUT 
SET OPTION  ALWBLK = *ALLREAD , 
ALWCPYDTA = *OPTIMIZE , 
COMMIT = *NONE , 
DECRESULT = (31, 31, 00) , 
DFTRDBCOL = *NONE , 
DYNDFTCOL = *NO , 
DYNUSRPRF = *USER , 
SRTSEQ = *HEX   

它们中的任何一个都会影响将结果集返回到 SSRS 吗?

stored-procedures db2
  • 3 3 个回答
  • 2988 Views

3 个回答

  • Voted
  1. mustaccio
    2013-10-30T14:54:05+08:002013-10-30T14:54:05+08:00

    您在存储过程声明中缺少的一件事是DYNAMIC RESULT SETS选项。该选项的默认值为 0,这可能会使客户端软件感到困惑。它(客户端软件)是否甚至可以处理存储过程返回的游标是另一回事。

    • 2
  2. Best Answer
    ajeh
    2013-11-01T08:53:43+08:002013-11-01T08:53:43+08:00

    在 SSRS 中报告 iSeries SQL 存储过程的解决方案是通过将两个 XML 标记添加到 RSReportDesigner.config 来将 IBM Client Access 附带的 DB2UDB .Net 提供程序安装到 BIDS 中。

    将以下内容添加到<Data>.config 中的标记:

    <Extension Name="DB2UDB" Type="IBM.Data.DB2.iSeries.iDB2Connection,IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9CDB2EBFB1F93A26"/>
    

    将以下内容添加到<Designer>标签中:

    <Extension Name="DB2UDB" Type="Microsoft.ReportingServices.QueryDesigners.GenericQueryDesigner,Microsoft.ReportingServices.QueryDesigners"/>
    

    这会将 DB2UDB 添加到数据源属性中的提供者列表中。然后,您可以在数据源中使用具有以下格式的连接字符串:

    Data Source=<IP of FQDN>;Initial Catalog=<DB name>;UserID=<user ID>;Password=<pass>;
    

    用户 ID 和密码需要输入连接字符串,因为如果输入凭据选项卡,提供商将无法使用它们。

    SSRS 报告向导无法基于 SP 创建报告。应改为使用基于临时选择语句的报告(select * from sysibm.sysdummy1或任何其他快速选择都可以)。

    创建报表后,可以将其数据集类型从查询更改为存储过程。SP 名称必须手动输入(下拉列表为空)。必须手动输入参数(在输入参数之前不会刷新字段)。参数名称需要匹配 SP 和输入为 的参数值[@<param name>]。日期参数必须指定为文本类型或日期/时间,其值表达式类似于:

    =FormatDateTime(Parameters!DATESTART.Value, DateFormat.ShortDate)
    

    如果使用文本类型,请输入不带引号的日期,例如:2013 年 10 月 31 日

    • 2
  3. WarrenT
    2013-10-30T15:59:19+08:002013-10-30T15:59:19+08:00

    iSeries Navigator 没有“返回”两个语句。它在消息选项卡中呼应它们,而不是在数据结果选项卡中。

    SYSIBM.SYSDUMMY1 是 IBM 提供的具有 1 列和 1 行的表。你得到了你写的程序的正确答案。

    SYSDUMMY1 通常在示例代码中用作评估不需要任何表的表达式的代理。例如:

    SELECT monthname(CURRENT DATE)
        FROM SYSIBM.SYSDUMMY1;
    

    然而,这是一个不必要的结构,因为 VALUES 语句在这些情况下同样有效,并且不需要表或视图作为数据源

    VALUES monthname(CURRENT DATE);
    

    在将使用 SELECT INTO 的情况下,VALUES INTO 是等效的。

    因此,既然我们已经消除了您使用 SYSDUMMY1 的需要,那么问题仍然是您想要完成什么?

    • 1

相关问题

  • z/OS 上 DB2 v9 上的 BLOB

  • 如何确定 mysql 数据库中是否存在过程或函数?

  • 是否有人使用 SQL Server 功能来创建按编号区分的存储过程组?

  • MySQL 存储例程中的动态 SQL

  • 解释计划中的 HSJOIN 是什么意思?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    授予用户对所有表的访问权限

    • 5 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve