oracle 存储过程学习

几个注意点:
1、在oracle中,数据表别名不能加as.
2、在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了。
3、在利用select ....into...语法时,必须先确保数据库中有该条记录,否则会报出“NO Data found"异常。
4、在存储过程中,别名不能和字段名称相同,否则虽然编译可以通过,但在运行阶段会报错。

    商业规则和业务逻辑可以通过程序存储在oracle中,这个程序就是程序过程。
     存储过程是SQL,PL/SQL,JAVA 语句的组合,它使你能将执行商业规则的代码从你的应用程序中移动到数据库。这样的结果就是,代码存储一次但是能够被多个程序使用。
    要创建一个过程对象,必须有create procedure系统权限。如果这个过程对象需要被其他的用户使用,那么你必须有create any procedure权限。执行procedure的时候,可能需要execute权限。或者execute any procedure权限。

如果单独赋予权限,例:
grant execute my_procedure to WW;
存储过程(procedure)和函数(function)的区别。
function 有返回值,并且可以直接在query中引用function或者使用function的返回值。
本质上没有区别,都是PL/SQL程序,都可以有返回值。最根本的区别是:存储过程是命令,而函数是表达式的一部分。比如:
package是function,procedure,variables和sql 语句的组合。package允许多个procedure使用同一个变量和游标。
sql代码:
create  procedure  sam.credit (acc_no in number,amount in number) as
 begin
     update  accounts
     set balance = balance + account
     where  account_id = acc_no;
end;

IN,out,in out 用来修饰参数。
IN 表示这个变量必须被调用者赋值然后传入到procedure进行处理。
out 表示procedure 通过这个变量将值传回给调用者。
IN OUT 则是这两种的组合。
authid 代表两种权限:
定义者权限(difiner  right 默认),执行者权限 (invoker  right)。
定义者权限说明这个procedure中涉及的表,视图等对象所需要的权限只要定义者拥有权限的话就可以访问。
执行者权限需要调用这个procedure的用户拥有相关表和对象的权限。

         oracle 存储过程的基本语法
1、基本结构
create  or  replace  procedure  存储过程名字
(参数 1 IN number,
  参数 2 IN number)
as 
变量 1 integer :=0;
变量2  date;
begin
end  存储过程名字

2、select into statement
将select 查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条记录,否则抛出异常(如果没有记录抛出 no_data_found)
begin
  select col1,col2 into 变量1,变量2 from  typestruct where xxx;
 exception
when no_data_found  then
 *****;
end;
...........

3、 IF 判断
if  v_test=1 then
  begin
    do something
  end;
endif;

4、while循环
while  v_test=1   loop
  begin
 ****
  end;
end loop;

5、变量赋值
v_test := 123;

6、用for  in 使用 cursor
is
cursor  cur is  select * from ***;
begin
for  cur_result  cur loop
begin
 v_sum :=cur_result.列名1+cur_result.列名 2
end;
 end loop;
end;


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22969361/viewspace-1204792/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22969361/viewspace-1204792/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值