pl/sql编程——过程、函数、包

 

pl/sql编程——过程、函数、包

 

1.注释

单行注释 --

select * from emp where empno=7788; --取得员工信息

多行注释 /*...*/来划分

 

2.标志符号的命名规范

1).当定义变量时,建议用v_作为前缀v_sal

2).当定义常量时,建议用c_作为前缀c_rate

3).当定义游标时,建议用_cursor作为后缀emp_cursor

4).当定义例外时,建议用e_作为前缀e_error

 

3.块结构示意图

pl/sql块由三个部分构成:定义部分执行部分例外处理部分。

如下所示:

declare

/*定义部分——定义常量、变量、游标、例外、复杂数据类型*/

begin

/*执行部分——要执行的pl/sql语句和sql语句*/

exception

/*例外处理部分——处理运行的各种错误*/

end;

定义部分是从declare开始的,该部分是可选的;

执行部分是从begin开始的,该部分是必须的,至少要写null,不能不写;

例外处理部分是从exception开始的,该部分是可选的。

 

& 表示要接收从控制台输入的变量。

 

4. 过程

过程用于执行特定的操作,当建立过程时,既可以指定输入参数(in),也可以指定输出参数(out)通过在过程中使用输入参数,可以将数据传递到执行部分;通过使用输出参数,可以将执行部分的数据传递到应用环境。在sqlplus中可以使用create procedure命令来建立过程。

 

5. JAVA中调用存储过程

 

CallableStatement cs = con.prepareCall("{call emp_pro(?,?)}");
//4.给?赋值
cs.setString(1,"SMITH");
cs.setInt(2,10);
//5.执行
cs.execute();

 

6. 函数

函数用于返回特定的数据,当建立函数时,在函数头部必须包含return子句。而在函数体内必须包含return语句返回的数据。我们可以使用create function来建立函数,实际案例:

--编写函数 返回指定人员的年薪
create function annual_income(name varchar2)
return number is
annual_salary number(7, 2);
begin
  select sal*12 + nvl(comm, 0) into annual_salary from emp where ename = name;
  return annual_salary;
end;

  

sqlplus中调用函数

SQL> var income number
SQL> call annual_incomec('scott') into :income; --注意:和income之间不能有空白
SQL> print income

 

同样我们可以在java程序中调用该函数 select annual_income('SCOTT') from dual;

 

7.

包用于在逻辑上组合过程和函数,它由包规范包体两部分组成。

1).我们可以使用create package命令来创建包。

--使用create package命令创建包
create package pkg_sal is
  procedure update_sal(name varchar2, new_sal number);
  function annual_income(name varchar2) return number;
end;

 

包的规范只包含了过程和函数的说明,但是没有过程和函数的实现代码。包体用于实现包规范中的过程和函数

2).建立包体可以使用create package body命令

--使用create package body创建包体
create or replace package body pkg_sal is
  procedure update_sal(name varchar2, new_sal number) is
    begin
      update emp set sal = new_sal where ename = name;
    end;
  function annual_income(name varchar2) return number is
    income number(7, 2);
    begin
      select sal*12 + nvl(comm, 0) into income from emp where ename = name;
      return income;
    end;
end;

 

3).如何调用包的过程或是函数

当调用包的过程或是函数时,在过程和函数前需要带有包名,如果要访问其它方案的包,还需要在包名前加方案名。

 

猜你喜欢

转载自it4j.iteye.com/blog/2007586
今日推荐