迈入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;

浙公网安备 33010602011771号