Oracle 10g 存储过程

来源:互联网 发布:修改adb的端口号 编辑:程序博客网 时间:2024/05/01 20:08
  1. 存储过程
  2. create or replace procedure procedure_name
  3.   [(parameter[{in | out |in out}] datetype)]
  4.   [is | as]
  5.     
  6.   begin
  7.     
  8.   end [procedure_name];
  9. 1 不带参数的存储过程
  10. create or replace procedure get_news is
  11.        rows number;
  12. begin
  13.        select count(*) into rows from stuInfo;
  14.        dbms_output.put_line('values is '||rows);
  15. end get_news;
  16. --测试
  17. declare 
  18. begin
  19.   get_news();
  20. end;
  21. 2 带有输入输出参数的存储过程
  22. create or replace procedure multi_params(sex in varchar2,rows out number,msg in out varchar2) is
  23. begin
  24.        select count(*) into rows from stuInfo where stuSex=sex;
  25.        msg:=msg||sex||'生,共有'||rows||'人!';
  26. end multi_params;
  27. set serverout on
  28. declare
  29. inparm varchar(50):='男';
  30. outparm number(10);
  31. inoutparm varchar(50):='学生信息:>> ';
  32. begin
  33.   multi_params(inparm,outparm,inoutparm);
  34.   dbms_output.put_line(inoutparm);
  35. end;
  36. 测试窗口中测试
  37. declare 
  38.   inparm char(50);
  39.   outparm integer;
  40.   inoutparm char(50);
  41. begin
  42.   :inparm:='男';
  43.   :inoutparm :='学生信息:>> ';
  44.   multi_params(:inparm,:outparm,:inoutparm);
  45. end;
  46. 命令窗口测试
  47. set serverout on
  48. declare
  49. inparm varchar(50):='男';
  50. outparm number(10);
  51. inoutparm varchar(50):='学生信息:>> ';
  52. begin
  53.   multi_params(inparm,outparm,inoutparm);
  54.   dbms_output.put_line(outparm||' '||inoutparm);
  55. end;
  56. /
  57. --最后一定要打上/表示语句块结束.
  58. 3 创建带有游标的过程
  59. 3.1 显示定义游标的格式
  60. create or replace procedure <procedure_name>
  61. is
  62. cursor <cursor_name> is <sql_statement>
  63. begin
  64.   for<record_name> in <cursor_name> loop
  65.   <other code>
  66.   end loop;
  67. end <procedure_name>;
  68. create or replace procedure stuInfo_cur_pro 
  69. is
  70. cursor stuinfo_cur 
  71.        is select stuName from stuInfo;
  72. begin
  73.   for stuInfo_rec in stuinfo_cur loop
  74.     dbms_output.put_line(stuInfo_rec.stuName);
  75.   end loop;  
  76. end stuInfo_cur_pro;
  77. 测试 exec stuInfo_cur_pro;
  78. 3.2 隐式定义游标格式
  79. create or replace procedure <procedure_name>
  80. is
  81. begin
  82.  for <record_name> in (<sql_statement>) loop
  83.    <other code>
  84.  end loop;
  85. end <procedure_name);
  86. create or replace procedure stuInfo_cur_pro_hidden 
  87. is
  88. begin
  89.   for stuInfo_rec in (select stuName,stuSex from StuInfo) loop
  90.       dbms_output.put_line(stuInfo_rec.stuName||' '||stuInfo_rec.stuSex);
  91.   end loop;
  92. end stuInfo_cur_pro_hidden;
  93. 测试
  94. exec stuInfo_cur_pro_hidden;
  95. 4 带有批量绑定的存储过程
  96. create or replace procedure bluk_bind_pro is
  97. begin
  98.   type bbp is table of Stuinfo.Stuname% type 
  99.                        index by binary_integer;
  100.   temp_bulk bbp;
  101.   begin
  102.     select stuName bulk collect into temp_bulk from stuInfo;
  103.   end
  104. end bluk_bind_pro;

 

原创粉丝点击