Oracle表单建设者PL / SQL - 访问是从其他列dervied列(oracle form

2019-10-29 20:20发布

我在我的数据库中有一堆从数据库中的其他信息来源的领域,这是观点是如何定义的视图:

create view patient_account_view AS 
  select patient.p_mrn,
         p_fname,
         p_lname,
         ammount_paid,
         quantity*item_cost + repeats*item_cost  "ammount_owing", 
         (quantity*item_cost + repeats*item_cost) - ammount_paid "balance"
    from patient_account,
         patient,
         diagnosis,
         prescribed_treatment,
         items_used,
         item,
         perscription
    where patient.p_mrn = diagnosis.p_mrn AND
          patient_account.p_mrn = patient.p_mrn AND
          diagnosis.prescribed_treatment_id = prescribed_treatment.prescribed_treatment_id AND 
          prescribed_treatment.prescribed_treatment_id = perscription.prescribed_treatment_id AND
          items_used.ptreatment_id = prescribed_treatment.prescribed_treatment_id AND
          items_used.item_number = item.item_number;

我想用PL / SQL来访问视图中的信息将它粘成一种形式,但我发现了一个“坏绑定变量”的错误。 如何访问这种属性,而不必重新计算存储在那里的信息?

这里是有问题的PLSQL:

DECLARE
    pmrn patient.p_mrn%TYPE;
    var_ptuple patient%ROWTYPE;
    var_accttuple patient_account%ROWTYPE;
BEGIN
    pmrn := :PATIENT_BLOCK.MRN_FIELD;
    SELECT * INTO var_ptuple from patient WHERE patient.p_mrn = pmrn;
    SELECT * INTO var_accttuple from patient_account_view WHERE patient_account_view.p_mrn = pmrn;
    :PATIENT_BLOCK.FNAME := var_ptuple.p_fname;
    :PATIENT_BLOCK.LNAME := var_ptuple.p_lname;
    :PATIENT_BLOCK.BALACNCE_OWING := var_accttuple.balance;
END;

Answer 1:

您的视图的列patient_account_view不匹配表的完全列patient_account ,但在你的代码中有:

var_accttuple patient_account%ROWTYPE;

它在运行,这意味着:

SELECT * INTO var_accttuple from patient_account_view ...

您还没有指定的列被映射到记录属性,因此Oracle要求列列表完全匹配。

在这种情况下,我预计你可能想改变变量的定义,例如,

var_accttuple patient_account_view%ROWTYPE;

边注

既然你只使用一个属性从视图中,可以简化您的代码如下:

SELECT balance INTO :PATIENT_BLOCK.BALACNCE_OWING
from patient_account_view WHERE patient_account_view.p_mrn = pmrn;

你不再需要var_accttuple



文章来源: oracle forms builder pl/sql - access a column that is dervied from other columns