练习record & pl/sql表的使用,所谓的数据抽取只是用来测试结果的正确与否。
create or replace procedure sp_test_hzy is
-- 使用record和pl/sql表实现数据抽取
-- record_type用于获取每一行记录
type record_type is record(
r_SJLYSS t_dmzh_dygx.SJLYSS%type,
r_LYB_COL_NAME t_dmzh_dygx.LYB_COL_NAME%type,
r_LYB_COL_VALUE t_dmzh_dygx.LYB_COL_VALUE%type,
r_LYB_COL_VALUE_CN t_dmzh_dygx.LYB_COL_VALUE_CN%type,
r_BZB t_dmzh_dygx.BZB%type,
r_BZB_COL_VALUE t_dmzh_dygx.BZB_COL_VALUE%type,
r_BZB_COL_VALUE_CN t_dmzh_dygx.BZB_COL_VALUE_CN%type);
-- plsql_type以rowid为索引列,存储各行数据
type plsql_type is table of record_type index by varchar2(50);
r_test record_type;
p_test plsql_type;
-- ls用来实现索引列的遍历
ls varchar2(50);
begin
-- 用record逐行获取数据,存入plsql表
for cur in (select rowidtochar(rowid) rid from t_dmzh_dygx) loop
select SJLYSS,
LYB_COL_NAME,
LYB_COL_VALUE,
LYB_COL_VALUE_CN,
BZB,
BZB_COL_VALUE,
BZB_COL_VALUE_CN
into r_test
from t_dmzh_dygx
where rowidtochar(rowid) = cur.rid;
p_test(cur.rid) := r_test;
end loop;
-- 使用ls遍历plsql表,实现数据抽取
ls := p_test.first;
for i IN 1 .. p_test.count loop
insert into t_dmzh_dygx_test values p_test (ls);
ls := p_test.next(ls);
end loop;
commit;
end;
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21156810/viewspace-1019044/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21156810/viewspace-1019044/