sql – 如何在TOAD的DataGrid中显示sys_refcursor数据

前端之家收集整理的这篇文章主要介绍了sql – 如何在TOAD的DataGrid中显示sys_refcursor数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要帮助.
(我搜索了很多并且变得更加困惑.)

我使用Toad 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中:

--- I WANT THIS CODE CAN EXECUTE IN TOAD'S sql EDITOR.

    DECLARE 
      PFCORTE DATE;
      LCURSOR SYS_REFCURSOR;
    BEGIN 

        PFCORTE := '31/08/2012';
        -- LCURSOR := NULL;  -- Modify the code to initialize this parameter

        mypaq.REPORTACC( TO_DATE(PFCORTE,'DD/MM/YYYY'),LCURSOR );

        :to_grid := LCURSOR;

        COMMIT;

    END;

当我执行脚本(F9),并设置变量:to_grid类型光标,
我得到了下一个错误

“ORA-24338:语句句柄未执行”

可能是什么问题

提前致谢.

谢谢你的四个帖子……工作得很好!

但现在有另一个问题……
如果我替换这样的复杂查询(从表中选择c1,c2,c3 …):

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,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.CDGCL,sal.CICLO,SAL.INICICLO,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,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;

为什么不能显示结果?
(如果我直接在TOAD sql编辑器中执行它,查询工作正常)

再次感谢….!!!

解决方法

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

您收到“ORA-24338:语句句柄未执行”错误的原因是因为您在访问之前关闭了光标.

这是正在发生的过程:

>执行程序
> OPEN语句返回指向内存中结果集的指针(但不返回任何数据)
> CLOSE语句在访问结果之前丢弃结果
>过程调用结束
>客户端调用程序(在本例中为TOAD)尝试访问结果流,但指针无效,因此无法读取任何内容并抛出错误

解决方案:删除关闭lcursor;声明.

猜你在找的MsSQL相关文章