Oracle 存储过程和存储函数学习笔记


学习视频:http://www.imooc.com/video/7420


1.存储过程和存储函数:是指存储在数据库中供所有用户调用的子程序;

存储过程和存储函数的相同点:都是一个完成特定功能的程序;

存储过程和存储函数的不同点:是否能用 return 语句返回值,存储过程不能使用return语句,存储方法可以使用return语句;


2.存储过程结构:


create or replace procedure  存储过程名字(参数)
as

begin

   PLSQL 子程序体;

end;


3.创建一个无参的存储过程:

CREATE OR REPLACE PROCEDURE SAYHELLOWORLD
/*
调用存储过程方法:
1.exec sayHelloWorld();
2.begin
       sayHelloWorld();
      sayHelloWorld();
end;

*/
AS  
--说明部分
begin
  dbms_output.put_line('Hello World');
end;


调用过程(使用命令框调用):

1). 先在PLSQL 中运行上面的存储过程,然后 快捷键 win+r ,输入 cmd  进入cmd命令窗口,输入 sqlplus 账户/密码@IP:端口/数据库实例名  ,连接数据库



2). 先输入   set  serveroutput on    打开屏幕的输出开关。


第一种方法调用存储过程。输入   exec sayHelloWorld();   单击回车,  调用存储过程,程序正常运行  窗口上即打印出 存储过程中设置的 输出语句"Hello World",调用成功。



第二种方法调用存储过程,输入 begin
       sayHelloWorld();
      sayHelloWorld();
end;

/      单击回车



4.创建一个带一个参数的存储过程:

create or replace procedure changeUserAge(eno in number) --in 表示输入参数  
  /*  
  调用存储过程方法:  
  1.exec sayHelloWorld(1);  
  2.begin  
         sayHelloWorld(1);  
        sayHelloWorld(2);  
  end;  
    
  */
 as
  -- 定义变量保存员工更改前的年龄  
  age0 user_test.user_age%type; --定义变量 age0 ,变量类型和 user_test表中的user_age 一致 
  age1 user_test.user_age%type;
begin
  --得到员工更改前的年龄 
       select user_age into age0 from user_test where user_id = eno; --更改员工年龄
       update user_test set user_age = (age0 + 100) where user_id = eno; --得到更改后的年龄 
       select user_age into age1 from user_test where user_id = eno; --打印更改前后的年龄 
       dbms_output.put_line('更改前:' || age0 || ' 更改后:' || age1);
end;
--调用方法和前面一致,  
exec sayHelloWorld(1); 括号内为传进去的参数


/*
调用存储过程方法:
1.exec sayHelloWorld(1);
2.begin
       sayHelloWorld(1);
      sayHelloWorld(2);
end;
 */

5.存储函数结构:

create or replace function 函数名(参数列表)
return  函数值类型

as

begin
   PLSQL 子程序体
end;
6.创建一个存储函数:
---创建一个存储函数:根据ID查询员工的年龄
create or replace function selectAge(eno in number)
return number  --返回number型的数据
as
--定义变量保存员工的年龄
age user_test.user_age%type;

begin
  --得到员工的年龄
  select user_age into age from user_test where user_id = eno;
  
  --返回员工年龄
  return age;
end;

7.创建有多个返回值的存储过程

--创建有多个返回值的存储过程,根据ID查询员工信息
create or replace procedure selectUserById(uid in number,
                                           uName out VARCHAR2,
                                           uAge out number,
                                           uSex out char)
                                           
as


begin
  select user_Name,user_AGE,USER_SEX into uName,uAge,uSex FROM USER_TEST WHERE USER_ID = uid;
end;
小知识:
1.在PLSQL 中查看已经创建的 存储过程和存储方法


2. 在本机中登录数据库超级用户(只能登录当前环境中已安装的数据库):
在cmd 窗口中输入:sqlplus / as sysdba


给 用户赋予相应的权限(调试存储过程和存储方法时会用到):
 grant DEBUG CONNECT SESSION ,DEBUG ANY PROCEDURE TO TEST   --给TEST 用户赋予 DEBUG,CONNECT,SESSION,DEBUG ANY PROCEDURE 权限




3.如果只有一个返回值,用存储函数,如果没有返回值或者有多个返回值,就用存储过程












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值