迈入orcl的学习之----存储过程

百度百科:

存储过程Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象

 

一.准备

 

1.登录system用户给普通用户权限:(此时的身份是:system

 

grant create any table to annan;--授权表的权限给annan角色

 

grant create any procedure to annan;

 

grant execute any procedure to annan;--授权存储过程的权限给annan角色

 

 

2. 创建一张表(此时的身份是:annan

 

--创建一张表

create table usertble(
usid number(10) primary key not null,
usName nvarchar2(20) not null,
uspwd nvarchar2(20) not null
)

--添加几条数据
insert into usertble values(2,'3333','1')

--查询
select * from usertble

 

  

二.创建存储过程

(此时的身份是:annan

1.

--创建存储过程:通过存储过程来查询usertble的总记录数
create or replace procedure proce_usertable
as
nums number(1);
begin
  select count(*) into nums from usertble;
  DBMS_OUTPUT.put_line('总人数:'||nums);
end;

 

 

2.去命令下执行

 

3.调用存储过程

--调用存储过程 语法:begin ‘存储过程名称’(变量1,变量2...) end;
begin
proce_usertable;
end;

  查询结果:

 

 

 

 

然后一个储存过程就这样好了。。。。。。。

 

三.用储存过程写一个添加用户信息

--创建存储过程:通过存储过程来添加usertble的信息
create or replace procedure insert_usertable
as
begin
  insert into usertble
  values
  (3,'999999','666');
  end;
  
--调用存储过程 :insert_usertable
begin
  insert_usertable;
  end;

四.带参数的存储过程

 

-------------带参的存储过程---------

 

 

 

---存储过程的参数

 

---IN 定义一个输入参数变量,用于传递参数给存储过程 

 

--OUT 定义一个输出参数变量,用于从存储过程获取数据 

 

---IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能 

 

 

 1.in

--1.创建有参数的存储过程  in :将值传到存储过程中
create or replace procedure test_in
(usid in number,usName in nvarchar2,uspwd nvarchar2 default '0')
as
begin
  insert into usertble
  values
  (usid,usName,uspwd);
  end;

--调用存储过程:test_in
begin
  test_in(4,'大灰狼','18');
  end;

 

 2.out

--2.创建有参数的存储过程  out :将存储过程中的值传出来
create or replace procedure test_out
(usNames out nvarchar2,uspwds out nvarchar2)
as
begin
  select usName,uspwd into usNames,uspwds from usertble where usid=4;
  DBMS_OUTPUT.put_line('用户名:'||usNames);
  DBMS_OUTPUT.put_line('密码:'||uspwds);
  end;
  
--调用存储过程:test_out
DECLARE
usNames nvarchar2(20);--声明参数usNames
uspwds nvarchar2(20);--声明参数uspwds
begin
  test_out(usNames,uspwds);
  DBMS_OUTPUT.put_line('☆用户名☆:'||usNames);
  DBMS_OUTPUT.put_line('☆密码☆:'||uspwds);
  end;

 3.in out

--3.创建有参数的存储过程  in out :将值传到存储过程中,再将存储过程中的值传出来
create or replace procedure test_in_out
(phone in out nvarchar2)
as
begin
  phone:='10086-'||phone;
  end;

--调用存储过程:test_in_out
DECLARE
phone nvarchar2(20);--声明参数phone
begin
  phone:='11111';
  test_in_out(phone);
  DBMS_OUTPUT.put_line('☆这个电话是☆:'||phone);
  end;

  

 

posted @ 2017-12-25 23:35  哈喽小伙  阅读(258)  评论(0编辑  收藏  举报