Wie man eine sys_refocursor data in TOADs DataGrid anzeigt

Bitte ich brauche Hilfe. (Ich habe viel gesucht und mehr verwirrt.)

Ich benutze Toad 9.7.25 und ich habe dieses Verfahren (in einem Paket)

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; 

Im Kröten-SQL-Editor möchte ich diese Prozedur ausführen und die Cursor-Ergebnisse in dem DataGrid der Kröte anzeigen:


 --- 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; 

Wenn ich das Skript (F9) ausführe und die Variable: to_grid Typ cursor setze, bekomme ich den nächsten Fehler:

"ORA-24338: statementshandle nicht ausgeführt"

Was kann das Problem sein?

Danke im Voraus.


Danke, vier deiner Posts … hat gut funktioniert!

Aber jetzt habe noch eine Frage … Wenn ich die einfache Abfrage (wähle c1, c2, c3 aus Tabelle …) für einen komplexeren wie diesen replace:

  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; 

Warum kann ich die Ergebnisse nicht anzeigen?
(Die Abfrage funktioniert gut, wenn ich sie direkt in einem TOAD SQL Editor ausführe)

Danke noch einmal….!!!

Solutions Collecting From Web of "Wie man eine sys_refocursor data in TOADs DataGrid anzeigt"

Nachdem Sie F9 gedrückt haben, erscheint der Dialog "variables" und Sie wählen Type = Cursor aus der Dropdown-list und drücken dann OK:

Wählen Sie Typ = Cursor

Der Grund für den Fehler "ORA-24338: statement handle not executed" liegt darin, dass Sie den Cursor vor dem Zugriff schließen.

Dies ist der process, der passiert:

  1. Führen Sie die Prozedur aus
  2. OPEN-statement gibt einen pointers auf die Ergebnismenge im memory zurück (gibt aber keine data zurück)
  3. Die CLOSE-statement verwirft die Ergebnisse, bevor auf sie zugegriffen wird
  4. Der Prozeduraufruf endet
  5. Der Clientaufrufer (in diesem Fall TOAD) versucht, auf den Ergebnisdatenstrom zuzugreifen, aber der pointers ist ungültig, so dass nichts gelesen werden kann und der Fehler ausgetriggers wird

Lösung: Entfernen Sie den close lcursor; Erklärung.

Da Ihre Prozedur nur eine Select-statement ausführt, verwenden Sie besser eine function wie

 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; / 

Schließen Sie lcursor hier nicht, schließen Sie sie von Ihrer aufrufenden statement ab, denn wenn Sie lcursor schließen, können Sie keine Ergebnisse sehen.

Und führe als aus

 select ReportaCC(<>) from dual 

Von Kröte, doppelklicken Sie den Cursor in Datagrid, um die Ergebnisse zu sehen.