SQL-запрос не показал результат в блочном блоке данных Oracle Forms - PullRequest
0 голосов
/ 25 апреля 2019

Я хочу отображать данные 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 Ответ

2 голосов
/ 25 апреля 2019

Вам просто нужно использовать предложение 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;
...