开发日记:Orcale 存储过程(一)

由于项目中用到存储过程,这两天把存储过程方面的知识简单回顾了一下并分享给大家。

编写第一个存储过程
create or replace procedure ky_proc_in_out(para3 in out varchar2) as
  v_name varchar2(20);
begin
  v_name := 'kangyi';
  para3  := v_name;
  dbms_output.put_line('para3:' || para3);
end;

上述代码实现的功能是将传入参数设置为‘kangyi’,存储过程的定义大致分为三部分:

//1.定义存储过程名及参数
create or replace procedure ky_proc_in_out(para3 in out varchar2) as
//2.设置成员变量
begin
//3.存储过程实现代码
end;

传入的形参中要添加两个类型,一个是输入输出类型,一个是具体的数据类型,这里简单介绍一下输入输出类型:
IN:默认类型,只能作为传入参数,即在存储过程能不能对其进行赋值。
OUT:只能作为传出参数,如果将它作为传入参数看待,它在存储过程中如果不赋值,总为null。
IN OUT:可作为输入和输出参数。真正的引用传递参数,和平时JAVA中的形参差不多。

项目中编写的第一个存储过程
create or replace procedure proc_normalcount(p1 OUT varchar2) as
  --定义一个游标用于得到符合查询条件的总数
  cursor c_postype is
    select COUNT(NAME)
      from (select TAX_INFO_GD.NAME,
                   TAX_INFO.NSR,
                   TAX_INFO_GD.SH_ID,
                   TAX_INFO.SHXYDM,
                   TAX_INFO_GD.SYLX,
                   TAX_INFO_GD.JDXZ
              FROM TAX_INFO_GD
              LEFT JOIN TAX_INFO
                ON TAX_INFO_GD.NAME = TAX_INFO.NSR
               AND TAX_INFO_GD.SH_ID = TAX_INFO.SHXYDM)
     where NSR is null
       and SHXYDM is null
       AND (SYLX = 1 OR SYLX = 3);
begin
--打开游标 
 open c_postype;
--取出总数赋值给输出参数p1
  fetch c_postype
    into p1;
--关闭游标  
close c_postype;
end;

上述存储过程主要解决的需求是查找出第二张表在第一张表中名称和ID都不存的数据条数

你可能感兴趣的:(开发日记:Orcale 存储过程(一))