Sql 如何在蟾蜍的数据网格中显示sys_refcursor数据

Sql 如何在蟾蜍的数据网格中显示sys_refcursor数据,sql,plsql,oracle11g,toad,sys-refcursor,Sql,Plsql,Oracle11g,Toad,Sys Refcursor,求你了,我需要帮助。 我搜了很多,弄得更糊涂了 我使用蟾蜍9.7.25,我在一个包中完成了这个过程 PROCEDURE ReportaCC(pfcorte IN DATE, lcursor IN OUT SYS_REFCURSOR) IS BEGIN OPEN lcursor FOR select c1, c3, c3 from table1 where hdate = pfcorte; close lcursor; END; 在toad的sql编辑器中,我

求你了,我需要帮助。 我搜了很多,弄得更糊涂了

我使用蟾蜍9.7.25,我在一个包中完成了这个过程

PROCEDURE ReportaCC(pfcorte IN DATE, lcursor  IN OUT  SYS_REFCURSOR)
IS
BEGIN
    OPEN lcursor FOR
        select c1, c3, c3 from table1 where hdate = pfcorte;
    close lcursor;
END;
在toad的sql编辑器中,我希望执行该过程并在toad的datagrid中显示光标结果:

当我执行脚本F9并将变量:设置为\u grid type cursor时, 我得到下一个错误:

ORA-24338:未执行语句句柄

有什么问题吗

提前谢谢

谢谢你的帖子。。。很好

但现在我有另一个问题。。。 如果替换简单查询,请从表中选择c1、c2、c3。。。对于这样的mor复合体:

  PROCEDURE ReportaCC(pfcorte IN DATE,  lcursor OUT SYS_REFCURSOR)
    IS           
    BEGIN

        OPEN lcursor FOR

            SELECT ENC.CVEOTORGANTE, ENC.NOMBREOTORGANTE, ENC.IDENDINTIFICADORDEMEDIO, TO_CHAR(SYSDATE, 'YYYYMMDD') AS FECHAEXT, ENC.NOTAOTORGANTE, 
                   CIRCRED.valida_cc.QUITASIGNOS(VCL.APELLIDOPATERNO) AS VAL_APELLIDOPATERNO, 
                   CIRCRED.valida_cc.QUITASIGNOS(VCL.APELLIDOMATERNO) AS VAL_APMATERNO, 
                   CIRCRED.valida_cc.QUITASIGNOS(VCL.APELLIDOADICIONAL) AS APELLIDOADICIONAL , 
                   CIRCRED.valida_cc.QUITASIGNOS(VCL.NOMBRES) AS NOMBRES, 
                   VCL.FECHANACIMIENTO, 
                   circred.valida_cc.valida_rfc(Vcl.rfc,'CORRIGE') AS VALRFC,  
                   circred.valida_cc.valida_curp(VCL.CURP,'CORRIGE') AS VALCURP, VCL.NACIONALIDAD,
                   circred.valida_cc.valida_RESIDENCIA('ESIACOM', SC.TIPOVIV ) AS VAL_RESIDENCIA, VCL.NUMEROLICENCIACONDUCIR, 
                   circred.valida_cc.valida_EDOCIVIL('ESIACOM', VCL.ESTADOCIVIL) AS VAL_ESTADOCIVIL, VCL.SEXO, 
                   circred.valida_cc.valida_IFE(VCL.CLAVEELECTORIFE,'CORRIGE') AS CLAVEELECTORIFE, 
                   VCL.NUMERODEPENDIENTES,
                   VCL.FECHADEFUNCION, VCL.INDICADORDEFUNCION, VCL.TIPOPERSONA,
                   CIRCRED.valida_cc.QUITASIGNOS(VCL.DIRECCION) AS DIRECCION, 
                   CIRCRED.valida_cc.QUITASIGNOS(VCL.COLONIAPOBLACION) AS COLONIAPOBLACION, 
                   CIRCRED.valida_cc.QUITASIGNOS(VCL.DELEGACIONMUNICIPIO) AS DELEGACIONMUNICIPIO, 
                   CIRCRED.valida_cc.QUITASIGNOS(VCL.CIUDAD) AS CIUDAD, 
                   VCL.ESTADO, circred.valida_cc.valida_cp(VCL.CP, VCL.CDGEF) AS VAL_CP, VCL.FECHARESIDENCIA,
                   circred.valida_cc.valida_TEL(VCL.NUMEROTELEFONO,'CORRIGE') AS VAL_TEL, circred.valida_cc.valida_TIPODOMICILIO('ESIACOM', 'C') AS VAL_TIPODOMICILIO, VCL.TIPOASENTAMIENTO,    
                   EMP.*,
                   ENC.CVEOTORGANTE CVEACTUAL, ENC.NOMBREOTORGANTE, SAL.CUENTAACTUAL, SAL.TIPORESPONSABILIDAD, SAL.TIPOCUENTA, SAL.TIPOCONTRA, SAL.CLAVEUNIDADMONETARIA, SAL.VALORACTIVOVALUACION,
                   SAL.NUMPAGOS, SAL.FREQPAGOS,SAL.PAGOPACCL, SAL.FECHAAPERTURACUENTA, 
                   TO_CHAR(circred.valida_cc.FUN_FULTDEPCL(sal.CLNS, sal.CDGNS, sal.CDGNS, sal.CDGCL, sal.CICLO, SAL.INICICLO, SAL.FREQPAGOS, pfcorte ), 'YYYYMMDD') AS FULTPAGO,  
                   SAL.FECHAULTIMACOMPRA,  SAL.FECHACIERRECUENTA, SAL.FECHACORTE, SAL.GARANTIA, SAL.CREDITOMAXIMO,
                   SAL.SALDOCL, SAL.limitecredito, SAL.SDOVENCL, SAL.NUMPAGVEN, SAL.pagoactual,  SAL.HISTORICOPAG, SAL.CLAVEPREVENCION, SAL.TOTPAGREP, SAL.CLAVEANTERIOROTORGANTE, 
                   SAL.NOMBREANTERIOROTORGANTE, SAL.NUMEROCUENTAANTERIOR,
                   SAL.SUMSALDO, SAL.sumsdoven, SAL.numcred, SAL.numdirecc, SAL.numempleo, SAL.numctas, ENC.NOMBREOTORGANTE, NULL AS DOMDEVOL       
            FROM
                CIRCRED.VW_ENCABEZADO ENC,
                circred.VW_DATOSPERDOM  VCL,
                ICARO.VW_PROYINVE  SC,
                CIRCRED.EMPLEO  EMP,
                CIRCRED.VW_SALDOINCOB    SAL
            WHERE SAL.FUENTEBD = 'ESIACOM' 
                AND SAL.CDGCL = VCL.CDGCL  
                AND SAL.CDGCL = SC.CDGCL(+) AND SAL.CICLO = SC.CICLO(+) and SAL.INICICLO = SC.INICIO(+)
                AND SAL.FCORTE = pfcorte
                AND SAL.STATUSCC IN ('INCOB', 'CIERR', 'CEROS')  ;                       

    END ReportaCC;
为什么不能显示结果? 如果我直接在toadsql编辑器中执行查询,那么查询可以正常工作


再次感谢

由于您的过程只执行select语句,因此最好使用以下函数

CREATE or REPLACE function ReportaCC(pfcorte IN DATE) 
RETURN SYS_REFCURSOR
AS
   lcursor   SYS_REFCURSOR;
BEGIN
   OPEN lcursor FOR
     select c1, c3, c3 from table1 where hdate = pfcorte;
   RETURN lcursor ;
END;
/
不要在此处关闭lcursor,请从调用语句中关闭,因为如果关闭lcursor,您将无法看到任何结果

执行为

select ReportaCC(<>) from dual
在toad中,双击datagrid中的光标以查看结果。

点击F9后,变量对话框出现,从下拉列表中选择Type=cursor,然后按OK:

获取ORA-24338:statement handle not executed错误的原因是在访问游标之前关闭了游标

这就是正在发生的过程:

执行程序 OPEN语句返回指向内存中结果集的指针,但不返回任何数据 CLOSE语句在访问结果之前丢弃这些结果 过程调用结束 在本例中,客户机调用方TOAD试图访问结果流,但指针无效,因此无法读取任何内容并引发错误
解决方案:取下关闭的lcursor;语句。

您不应该在过程结束时关闭光标。我建议您阅读和关于堆栈溢出的内容。此查询在哪里不起作用?Polppan:当我调用过程时。。。。不显示行。。。。宣布PFCORTE日期;开始PFCORTE:=“2012年8月31日”;ICARO.ICARO_PRUEBA.REPORTACC_SALDOSINCOB TO_DATEPFCORTE,'DD/MM/YYYY':CCCURSOR;结束/@你怎么知道你的SQL是正确的?若并没有抛出错误,那个么听起来好像select语句并没有返回任何行。可能没有任何内容与条件匹配,可能日期/时间参数与try和TRUNCSAL.FCORTE=truncpforte不匹配,无法从日期比较中删除时间元素,或者可能某个联接不正确。在您的过程之外运行该语句,以验证它实际上应该返回行。@arzammg_@gmail.com为什么您不接受答案?你注意到这确实回答了你原来的问题。。。如果您还有其他问题,为什么不单独发布,并提供有关错误消息的更多详细信息?你可以将你的问题恢复到原来的状态,接受这个答案,这样以后任何其他正在搜索这个问题的人都可以在这里找到答案。谢谢Polppan。。。从双重选择可以很好地工作。。。。但是如何将显示为excel的数据保存。。。。再次感谢
select ReportaCC(<>) from dual