以下是我的PL / SQL块:
DROP TYPE t_tf_tab;
DROP TYPE t_tf_row;
CREATE TYPE t_tf_row AS OBJECT (
zipzone_id NUMBER,
beginzipcode NUMBER,
endzipcode NUMBER,
cu_rate number,
st_rate number,
su_rate number
);
CREATE TYPE t_tf_tab IS TABLE OF t_tf_row;
----------------------------------------------------------------------------------------------
create or replace
FUNCTION get_tab_ptf (p_rows IN NUMBER) RETURN t_tf_tab PIPELINED IS
zip_id1 number;
zip_id2 number;
begin_zip number;
end_zip number;
rowcount number;
rec t_tf_row;
BEGIN
select count(*) into rowcount from GSW_ZIP_ZONES;
select min(ZIPZONE_ID) into zip_id1 from GSW_ZIP_ZONES;
zip_id2 :=zip_id1 +1;
select ENDZIPCODE into end_zip from GSW_ZIP_ZONES where ZIPZONE_ID=zip_id1;
select BEGINZIPCODE into begin_zip from GSW_ZIP_ZONES where ZIPZONE_ID=zip_id2;
FOR counter in 1..rowcount
LOOP
if((begin_zip-end_zip)>1) THEN
SELECT z.ZIPZONE_ID, z.BEGINZIPCODE, z.ENDZIPCODE, z.TAXING_CODE_ID, g.su_rate
into rec
from SBXEXT.GSW_ZIP_ZONES z
join gsw_geocodes g on z.taxing_code_id= g.taxing_code_id where ZIPZONE_ID in (zip_id1,zip_id2);
PIPE ROW (rec);
end if;
zip_id1 :=zip_id1 + 1;
zip_id2 :=zip_id2 + 1;
END LOOP;
RETURN;
END;
我在If语句后收到错误。错误发生在Select语句中,告知select语句将被忽略。我不知道如何在If块中使用Select语句。请帮忙。
答案 0 :(得分:2)
我发现您最后使用了INTO
个关键字..它必须位于SELECT
的旁边。
将此添加到DECLARE
rec t_tf_row;
然后,
SELECT z.ZIPZONE_ID, z.BEGINZIPCODE, z.ENDZIPCODE, z.TAXING_CODE_ID, g.su_rate
into rec
from SBXEXT.GSW_ZIP_ZONES z
join gsw_geocodes g on z.taxing_code_id= g.taxing_code_id
where ZIPZONE_ID in (zip_id1,zip_id2)