SQL Query未在Data Block Oracle Forms上显示结果

问题描述 投票:0回答:1

我希望通过按下按钮将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
oracle oracle11g oracle10g oracleforms oracle-fusion-middleware
1个回答
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;
© www.soinside.com 2019 - 2024. All rights reserved.