过滤存储过程结果 (Informix)

Hoj*_*far 4 stored-procedures informix

IBM Informix 动态服务器版本 11.50.UC5XA。

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

select AGENT_NAME, AGENT_LOGIN_ID from 
       TABLE(sp_agent_detail('2014-02-04 04:00:00', '2014-02-04 23:00:00'))
Run Code Online (Sandbox Code Playgroud)

结果出现这样的错误:

java.sql.SQLException: Illegal SQL statement in SPL routine.
Run Code Online (Sandbox Code Playgroud)

接下来我尝试这个语法:

select AGENT_NAME, AGENT_LOGIN_ID from 
       TABLE(MULTISET{sp_agent_call_summary 
    ('2014-02-04 04:00:00', '2014-02-04 23:00:00')})
Run Code Online (Sandbox Code Playgroud)

结果:

 java.sql.SQLException: Function (informix.sp_agent_call_summary) 
returns too many values.
Run Code Online (Sandbox Code Playgroud)

然后我尝试了这个:

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 SP)
Run Code Online (Sandbox Code Playgroud)

结果:

java.sql.SQLException: Illegal SQL statement in SPL routine.
Run Code Online (Sandbox Code Playgroud)

cei*_*art 5

这是如何工作的说明。
这是在 Informix 11.50 FC9 上使用 dbaccess 执行的。您可以命名返回参数,但它们仅在自己将过程作为过程执行时才有效...而不是在 select 语句中执行。您需要手动命名每一列...请检查下面。

IBM Informix 11.50 手册中的参考资料:


create procedure dummy ( param integer )
returning int as id , char(10) as name, date as created
define vid int;;
define vname char(10);;
define vcreate date;;

foreach c1 for 
  select first 10 tabid, tabname, created 
     into vid, vname, vcreate 
     from systables where tabid >= param

  return vid , vname, vcreate with resume ;;
end foreach ;;

end procedure
;
Routine created.

;

execute procedure dummy(10);

         id name       created

         10 syssyntabl 20/02/2014
         11 sysconstra 20/02/2014
         12 sysreferen 20/02/2014
         13 syschecks  20/02/2014
         14 sysdefault 20/02/2014
         15 syscoldepe 20/02/2014
         16 sysprocedu 20/02/2014
         17 sysprocbod 20/02/2014
         18 sysprocpla 20/02/2014
         19 sysprocaut 20/02/2014

10 row(s) retrieved.


select  * from table(dummy(10));

unnamed_col_1 unnamed_col_2 unnamed_col_3

           10 syssyntabl    20/02/2014
           11 sysconstra    20/02/2014
           12 sysreferen    20/02/2014
           13 syschecks     20/02/2014
           14 sysdefault    20/02/2014
           15 syscoldepe    20/02/2014
           16 sysprocedu    20/02/2014
           17 sysprocbod    20/02/2014
           18 sysprocpla    20/02/2014
           19 sysprocaut    20/02/2014

10 row(s) retrieved.


select  * from table(dummy(10)) as x(id,name,created);

         id name       created

         10 syssyntabl 20/02/2014
         11 sysconstra 20/02/2014
         12 sysreferen 20/02/2014
         13 syschecks  20/02/2014
         14 sysdefault 20/02/2014
         15 syscoldepe 20/02/2014
         16 sysprocedu 20/02/2014
         17 sysprocbod 20/02/2014
         18 sysprocpla 20/02/2014
         19 sysprocaut 20/02/2014

10 row(s) retrieved.


select  x.id,name from table(dummy(10)) x(id,name,created);

         id name

         10 syssyntabl
         11 sysconstra
         12 sysreferen
         13 syschecks
         14 sysdefault
         15 syscoldepe
         16 sysprocedu
         17 sysprocbod
         18 sysprocpla
         19 sysprocaut

10 row(s) retrieved.



Database closed.
Run Code Online (Sandbox Code Playgroud)