我想通过按一下按钮将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
答案 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
,无论该列的数据类型为何。 如果您需要携带多条记录,请使用
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;