百度百科:
存储过程(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;