SQL查询未在数据块Oracle表单上显示结果

时间:2019-04-25 05:44:28

标签: oracle oracle11g oracle10g oracleforms oracle-fusion-middleware

我想通过按一下按钮将SQL查询数据显示到数据块中。

代码:

DECLARE
 p_cnic VARCHAR2(20);
BEGIN

 p_cnic := 'SELECT cnicno FROM hof WHERE cnicno IN (SELECT cnic_no FROM we_group_hof_k)';
 :we_group_hof_k.CNIC_NO := p_cnic;
END;

数据块“ CNIC_NO”的数据类型为VARCHAR

当我按下按钮时,我得到了错误

FRM-40735: WHEN-BUTTON-PRESSED Trigger raised unhandled exception

1 个答案:

答案 0 :(得分:2)

您只需要使用带有INTO语句的SELECT子句,而无需使用quotes

BEGIN    
  SELECT cnicno
    INTO :we_group_hof_k.CNIC_NO 
    FROM hof 
   WHERE cnicno IN (SELECT cnic_no FROM we_group_hof_k);     
 EXCEPTION WHEN no_data_found THEN null;
END;
  • 在您的情况下,无需使用局部变量(p_cnic),例如您 可以直接为该字段分配值。如果您确实需要,请选择 定义为p_cnic hof.cnicno%type,无论该列的数据类型为何。
  • 添加异常处理以防止引发no_data_found 例外
  

如果您需要携带多条记录,请使用SELECT .. INTO   子句不合适,因为您会得到

     

ORA-01422: exact fetch returns more than one requested number

     

在这种情况下。

针对上述情况,建议改用游标:

BEGIN   
     go_block('myblock'); 
     first_record;
  for c in
          (
           SELECT cnicno
             FROM hof 
            WHERE cnicno IN (SELECT cnic_no FROM we_group_hof_k)
          )     
  loop
    :we_group_hof_k.CNIC_NO := c.cnicno;
     next_record;
  end loop;
END;