Squeak.ru - шаблоны программирования

Как отобразить данные sys_refcursor в TOAD DataGrid

Пожалуйста, мне нужна помощь. (Я много искал и еще больше запутался.)

Я использую 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;

В редакторе SQL жабы я хотел бы выполнить эту процедуру и показать результаты курсора в сетке данных жабы:


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

Почему не удается отобразить результаты?
(запрос работает нормально, если я выполняю его непосредственно в редакторе TOAD SQL)

Еще раз спасибо....!!!


  • Вы не должны закрывать курсор в конце процедуры. 05.10.2012
  • Я предлагаю вам прочитать заявление о миссии и FAQ. о переполнении стека. 05.10.2012
  • Где этот запрос не работает? 05.10.2012
  • Polppan: Когда я вызываю процедуру.... не показывает строки.... DECLARE PFCORTE DATE; НАЧАТЬ PFCORTE := '31/08/2012'; ICARO.ICARO_PRUEBA.REPORTACC_SALDOSINCOB (TO_DATE(PFCORTE,'ДД/ММ/ГГГГ') , :CCCURSOR); КОНЕЦ; / 05.10.2012
  • @arzammg_at_gmail.com Откуда вы знаете, что ваш SQL правильный? Если ошибка не выдается, это звучит так, как будто ваш оператор select просто не возвращает никаких строк. Возможно, ничего не соответствует критериям, возможно, параметр даты/времени не соответствует (попробуйте AND TRUNC(SAL.FCORTE) = TRUNC(pfcorte) удалить элемент времени из сравнения дат) или, возможно, одно из ваших объединений неверно. Запустите оператор вне вашей процедуры, чтобы убедиться, что он действительно должен возвращать строки. 05.10.2012
  • Привет wweicker, я сделал это: я запустил оператор вне процедуры, и он возвращает строки ... только когда я звоню, как я объяснил, не показывает строки .... спасибо 06.10.2012
  • @arzammg_at_gmail.com Если это оператор выбора sql, почему бы не использовать функцию? Вы выполнили оператор sql вне своей процедуры, передав PFCORTE как to_char? потому что в вашей процедуре это to_char. 06.10.2012

Ответы:


1

После того, как вы нажмете F9, появится диалоговое окно «Переменные», и вы выберите Type = Cursor из раскрывающегося списка, затем нажмите OK:

Выберите тип=Курсор

Причина, по которой вы получаете сообщение об ошибке «ORA-24338: дескриптор оператора не выполнен», заключается в том, что вы закрываете курсор до того, как к нему будет осуществлен доступ.

Это процесс, который происходит:

  1. Выполнить процедуру
  2. Оператор OPEN возвращает указатель на набор результатов в памяти (но не возвращает никаких данных)
  3. Оператор CLOSE отбрасывает результаты до того, как они будут доступны
  4. Вызов процедуры завершается
  5. Вызывающий клиент (в данном случае TOAD) пытается получить доступ к потоку результатов, но указатель недействителен, поэтому ничего не может быть прочитано, и возникает ошибка.

Решение: удалите оператор close lcursor;.

05.10.2012
  • @arzammg_at_gmail.com, почему вы не приняли ответ? Вы отметили, что это действительно ответило на ваш первоначальный вопрос ... если у вас есть другой вопрос, почему бы вам не опубликовать его отдельно (и с более подробной информацией о том, что такое сообщение об ошибке)? Вы можете вернуть свой вопрос в исходное состояние, принять этот ответ, и таким образом любой другой в будущем, кто ищет этот же вопрос, найдет ответ здесь. 05.10.2012

  • 2

    Поскольку ваша процедура выполняет только оператор выбора, лучше используйте такую ​​​​функцию, как

    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
    

    из жабы, дважды щелкните курсор в сетке данных, чтобы увидеть результаты.

    05.10.2012
  • Спасибо Polppan ... выбор из двойного работает нормально .... но как я могу сохранить данные, показанные как Excel? .... еще раз спасибо 06.10.2012
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...