前几天面试的时候,人家出了个面试题,说通过存储过程打印表里面的数据,从没做过纸上手写存储过程的,结果一脸懵逼,估计要凉,只能怪自己平时不细心吧,下来研究了之后做个记录,结构和过程都不复杂。
过程中参考https://blog.csdn.net/wohaqiyi/article/details/81607172
CREATE OR REPLACE PROCEDURE pro_cursor1(tbname VARCHAR2 )IS
TYPE curtype IS REF CURSOR;
cur curtype;
dm varchar2(100);
mc varchar2(100);
cursor_sql varchar2(200):='select dm代码,mc名称 from '|| tbname;
Begin
--open cur for cursor_sql;
open cur for cursor_sql;
fetch cur into dm,mc;
loop
dbms_output.put_line(dm||','||mc);
end loop;
close cur;
end;
create or replace procedure pro_cursor2 is
cursor cur is
select dm代码,mc名称 from dapan_2020_05_29 t where rownum<20;
v_dm varchar2(100);
v_mc varchar2(100);
begin
open cur;
loop
fetch cur into v_dm,v_mc ;
exit when cur%NOTFOUND;
dbms_output.put_line(v_dm||','||v_mc);
end loop;
close cur;
end;
create or replace procedure pro_cursor3 is
cursor cur is
select dm代码,mc名称 from dapan_2020_05_29 t where rownum<20;
currow cur%rowtype;
begin
open cur;
loop
fetch cur into currow;
exit when cur%NOTFOUND;
dbms_output.put_line(currow.dm代码||','||currow.mc名称);
end loop;
close cur;
end;
create or replace procedure pro_cursor4 is
cursor cur is
select dm代码,mc名称 from dapan_2020_05_29 t where rownum<20;
currow cur%rowtype;
begin
for currow in cur loop
exit when cur%NOTFOUND;
dbms_output.put_line(currow.dm代码||','||currow.mc名称);
end loop;
end;
create or replace procedure pro_cursor5 is
begin
for currow in (select dm代码,mc名称 from dapan_2020_05_29 t where rownum<20) loop
dbms_output.put_line(currow.dm代码||','||currow.mc名称);
end loop;
end;