2015-03-19 185 views
1

我在Oracle中创建了一个具有类型为SYS_REFCURSOR的OUT参数的存储过程(SP),该SP在Oracle中按预期方式执行。从Spotfire调用Oracle存储过程

CREATE OR REPLACE PROCEDURE SCHEMA.MyProc 
(
    p_Code IN varchar2, 
    p_FromDate IN Timestamp, 
    p_ToDate IN timestamp, 
    p_ResultSet OUT SYS_REFCURSOR 
) 
AS 
BEGIN 
    OPEN p_ResultSet FOR 
    -- Obtain required data 

END SF_EquipmentStatusHistory; 
/ 

然而,当在组织中的Spotfire家伙试图在Spotfire中创建新的程序,并引用我的SP,Spotfire中抱怨说,它不能有OUT参数。

阅读此链接Spotfire Procedure Overview,似乎表明Spotfire中“信息设计只支持返回类型REF CURSOR的数据程序”

有人可以请帮助,我怎么解决这个问题?

感谢

解决:

至于建议将存储过程中甲骨文功能并解决Spotfire中的问题,抱怨OUT参数:

CREATE OR REPLACE FUNCTION SCHEMA.MyFunc 
(
    p_Equipment_code IN varchar2, 
    p_FromDate IN Timestamp, 
    p_ToDate in timestamp 
) 
return SYS_REFCURSOR 
AS p_ResultSet sys_refcursor; 
BEGIN 
    OPEN p_ResultSet FOR 
    -- Obtain required data 
return p_ResultSet; 
END MyFunc 
/
+0

文档不确定 - 它提到“(也称为表函数)”。 Oracle中的表函数是一个'FUNCTION'(而不是'PROCEDURE'),它返回一个...的表格,参见http://docs.oracle.com/cd/B19306_01/appdev.102/b14289/dcitblfns.htm# CHDIIFEG – 2015-03-26 09:19:10

回答

0

,你可以尝试的东西像这样

CREATE OR REPLACE FUNCTION SCHEMA.MyFuctRC 
(
    p_Code IN varchar2, 
    p_FromDate IN Timestamp, 
    p_ToDate IN timestamp 
) 
Return sys_refcursor 

AS 
my_rc sys_refcursor ; 
BEGIN 
    OPEN my_rc FOR 
    -- your select statement 

    return my_rc; 

END MyFuctRC; 
/