几个注意点:
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;
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/