为什么在Oracle表单(基于过程)中查询不返回任何值?

时间:2019-02-22 09:29:23

标签: oracle oracleforms

我已经使用数据块向导创建了Oracle表单中的数据块,但是查询没有填充该表单。即使光标返回值并在查询过程中进入循环:

这是查询过程的代码:

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;

这是表单触发器查询过程的代码:

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 :(得分:1)

首先,请确保PD_PDT_SCHEDULE_TYPES_QUERY实际上是做某事-在SQL * Plus(或SQL Developer或您使用的任何其他工具)中进行测试。

QUERY-PROCEDURE触发器是由向导创建的;它是原样,因此您无需执行任何操作。 Forms表示您无论如何都不应该修改它。

为了使其正常工作,您应该编辑数据块的属性-转到“面板”,导航至“数据库”部分,然后打开“ 查询数据源”列-在此处,您应输入ALL过程返回的列,即pst_codepst_prty等,以及它们的数据类型,长度,精度...,取决于数据类型本身。

此外,修改查询数据源参数属性。由于您的过程不接受任何IN参数,因此它只是一个参数(TABLE类型,写其名称,模式为IN OUT)。如果您向过程传递了一些参数,则也将它们放在此处。

就是这样,我想。