创建游标.存储过程及包

创建游标.存储过程及包
/*********************************游标********************************/
/*单向游标:
  declare cursor  游标名  is select 语句
  带参游标:
  declare cursor  游标名  (参数1 类型,.....)is select 语句(可以带参数)
  游标属性:
          %found     ---是否找到
          %isopen    ---是否打开
          %notfound  ---找不到游标
          %rowcount  ---判断游标是否有结果
  游标循环:
          FOR 变量 IN 游标名 LOOP
          语句
          END LOOP
/************例子**************/
declare
       cursor cur_emp is select * from emp;
       e emp%rowtype;
       begin
       open cur_emp;
       fetch cur_emp into e;
       while cur_emp%found
       loop
           dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);
           fetch cur_emp into e;
       end loop;
       close cur_emp;
       end;
PL/SQL 过程已成功完成。
 
/*******不需定义和关闭游标****************/

SQL> begin
  2       for e in(select * from emp)
  3       loop
  4         dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);
  5       end loop;
  6  end;
  7  /
 
PL/SQL 过程已成功完成。
 
/*************************************存储过程******************************/
/*过程(procedure)
     create or replace procedure
     (参数1  in/out/in out  类型,
      参数2  in/out/in out  类型,
       ..........)
       is/as
       pl/sql语句块
/************例子**************/
  1  create or replace procedure proc_emp
  2  ( j in varchar2,
  3    c  out integer)
  4  as
  5    counter integer:=0;
  6  begin
  7  for e in (select *from emp where job=j)
  8  loop
  9  dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);
 10  counter:=(counter+1);
 11  end loop;
 12  c:=counter;
 13* end;
 14  /
 
过程已创建。
/********调用************/
exec 过程([参数])
 
/**********************************函数***************************/
/*函数(FOUCTION)
       create or replace function 名
          return 类型   is/as
          pl/sql语句块
/***********例子************/
  1  create or replace function fun_emp
  2     ( j in varchar2)
  3       return integer
  4        as
  5       counter integer:=0;
  6    begin
  7    for e in (select *from emp where job=j)
  8   loop
  9    dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);
 10   counter:=(counter+1);
 11    end loop;
 12    return counter;
 13* end;
SQL> /
 
函数已创建。
执行:exec 函数([参数])
 
/************************************创建包**********************/
/*包头:
 create or replace package 名
    is/as
    定义部分
    end
  包体:
 create or replace package body 名
        is/as
        代码部分
        end
/*********例子*********************/
--..........建包头................
create or replace package pag_wlxt as
procedure proc_ruku(code  varchar2);              -- 入库单号
end;
 
--.........建包体.................
 
create or replace package body pag_wlxt as
procedure proc_ruku(code  varchar2) is
num integer :=0;
counter integer :=0;
shbz wltrkgl0.rkshbz%type;
rkcb wltrkgl0%rowtype;
kcb wltkcgl0%rowtype;
 
原文地址:https://www.cnblogs.com/wenjl520/p/1445769.html