0

我的数据库中有一个视图,其中有一堆从数据库中的其他信息派生的字段,这就是视图的定义方式:

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

1 回答 1

0

您的视图patient_account_view的列与 table 的列不完全匹配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.

于 2013-07-27T09:48:24.987 回答