Почему в формах Oracle (на основе процедур) запрос не возвращает никаких значений? - PullRequest
0 голосов
/ 22 февраля 2019

Я сделал блок данных в формах оракула, используя Data Block Wizzard, однако запрос не заполняет форму.Даже если курсор возвращает значения и входит в цикл в процедуре запроса:

Вот код процедуры запроса:

PROCEDURE PD_PDT_SCHEDULE_TYPES_QUERY(par_pd_pdt_schedule_types_tbl IN OUT gt_pd_pdt_schedule_types_tbl) IS

    lc_err_msg   VARCHAR2(2000);
    lc_add_rec   VARCHAR2(1);
    lc_search_ok VARCHAR2(1);

    CURSOR c_pd_pdt_schedule_types IS
      SELECT pst_code,
             pst_prty,
             pst_mnemo,
             pst_name,
             pst_crt_mandatory,
             pst_pdt_mnemo,
             pst_type,
             pst_purpose,
             pst_purpose_det,
             pst_ref_mnemo,
             pst_hidden,
             pst_ref_show,
             pst_payment_show
      FROM   s_pd_pdt_schedule_types where pst_pdt_mnemo = 'SOME_PRODUCT';

    ln_idx NUMBER := 1;  
 BEGIN    
    FOR i IN c_pd_pdt_schedule_types
    LOOP
      par_pd_pdt_schedule_types_tbl(ln_idx) := i;
      ln_idx := ln_idx + 1;
    END LOOP;
  EXCEPTION
    WHEN OTHERS THEN
      lc_err_msg := 'FRL_184.PD_PDT_SCHEDULE_TYPES_QUERY error: ' || SQLERRM;
      RAISE_APPLICATION_ERROR(-20555, SUBSTR(lc_err_msg, 1, 2000));
  END PD_PDT_SCHEDULE_TYPES_QUERY;

Вот код триггера формы Query-Процедура:

DECLARE
bk_data FRL_184.GT_PD_PDT_SCHEDULE_TYPES_TBL;
BEGIN
frl_184.PD_PDT_SCHEDULE_TYPES_QUERY(bk_data);
PLSQL_TABLE.POPULATE_BLOCK(bk_data, 'S_PD_PDT_SCHEDULE_TYPES');
END;

1 Ответ

0 голосов
/ 22 февраля 2019

Прежде всего, убедитесь, что PD_PDT_SCHEDULE_TYPES_QUERY на самом деле что-то делает - протестируйте это в SQL * Plus (или в SQL Developer или любом другом инструменте, который вы используете).

QUERY-PROCEDURE триггер создается мастером;это как , с этим ничего нельзя поделать.Forms говорит, что вам все равно не следует изменять его.

Чтобы заставить его работать, вы должны отредактировать свойства блока данных - перейдите в палитру, перейдите в раздел «База данных» и откройте Запрос данныхисходные столбцы - там вы должны ввести ВСЕ столбцы, возвращаемые процедурой, т.е. pst_code, pst_prty и т. д., вместе с их типами данных, длиной, точностью ... в зависимости от самого типа данных.

Кроме того, измените Запрос аргументов источника данных свойство.Поскольку ваша процедура не принимает никаких параметров IN, это будет всего один аргумент (тип TABLE, напишите его имя, режим равен IN OUT).Если вы передадите в процедуру некоторые параметры, вы также добавите их сюда.

Думаю, что так и будет.

...