过滤存储过程结果 (Informix)

Posted

技术标签:

【中文标题】过滤存储过程结果 (Informix)【英文标题】:Filter Stored Procedure Result (Informix) 【发布时间】:2014-03-05 12:50:24 【问题描述】:

我有一个 Informix 数据库。此数据库包含一个名为“sp_agent_details”的存储过程,它获取两个 DateTime 参数。这个存储过程产生了大约 27 列,我只想要其中的几列用于报告。我试试这个语法:

select AGENT_NAME, AGENT_LOGIN_ID from 
       TABLE(sp_agent_detail('2014-02-04 04:00:00', '2014-02-04 23:00:00'))

这个结果这样的错误:

java.sql.SQLException: Illegal SQL statement in SPL routine.

接下来我试试这个语法:

select AGENT_NAME, AGENT_LOGIN_ID from 
       TABLE(MULTISETsp_agent_call_summary 
    ('2014-02-04 04:00:00', '2014-02-04 23:00:00'))

结果:

    java.sql.SQLException: Function (informix.sp_agent_call_summary) 
returns too many values.

【问题讨论】:

【参考方案1】:

您必须将 SP 的结果列映射到列名(按照程序返回的顺序!)。

所以你的陈述会变成:

select AGENT_NAME, AGENT_LOGIN_ID from 
   TABLE(sp_agent_detail('2014-02-04 04:00:00', '2014-02-04 23:00:00'))(AGENT_NAME, AGENT_LOGIN_ID, other columns that are returned by your SP)

【讨论】:

我使用了你的语句,但它的结果是这样的错误:java.sql.SQLException:发生了语法错误。 :( 我还删除了 TABLE 语句后的“,”,然后输入语句,但我再次收到此错误消息:“java.sql.SQLException:SPL 例程中的非法 SQL 语句。” 我编辑了我的第一个答案,他们是一个小错误,删除了一个','。 @HojjatJashnniloofar ,副驾驶的答案是正确的。由于您在 dba.stackexchange I answer there with code example... 复制了答案 @Copilot:您的回答是正确的,但此陈述无法解决我的问题。我使用这个语句,我也收到了一个错误。 java.sql.SQLException: Illegal SQL statement in SPL routine.

以上是关于过滤存储过程结果 (Informix)的主要内容,如果未能解决你的问题,请参考以下文章

Informix SQL / 在另一个查询中重用存储过程的结果

Informix SQL / 在表中插入存储过程的结果

在 Informix 中创建 TEMP 存储过程

Informix,在存储过程中初始化变量

informix 存储过程详解

Informix:在 Java 中使用存储过程