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)
这是如何工作的说明。
这是在 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)