存储过程-
|-概念:存储过程是一组预编译的SQL语句,便于下次调用,提高了开发效率,减轻了数据库压力。
|-优点:
|-1模块化程序设计,只需要创建一次存储过程,下次可以任意使用此过程(重用性高);
|-2执行效率更快,相比于大量的SLQ语句或重复执行的SQL,存储过程执行速度更快;
|-3减少网络传输量,几百行的SQL,只需几条的存储过程即可完成;
|-4安全机制好,对于没有执行权限的用户,也可以授权其执行;
|-使用介绍:
|-基本语法
|-createor replace procedure 存储过程名(param1 IN/OUT TYPE,param2 IN/OUT TYPE...)
as
--变量定义
Variable1 number(23);
Variable2 varchar2(100);
...
begin
select* from into param(OUT) emp where ename=param(in);
DBMS_OUTPUT.PUT_LINE();--控制台打印 调试用
--变量和字符串用 || 隔开
end;
--创建procedure 完成;
EXECUTE 存储过程名(param(IN)...); --执行
第一次使用DBMS_OUTPUT.PUT_LINE()时可能会有问题,
请使用 SET SERVEROUTPUT ON; 命令来打开此内置对象;
参考见下:
--存储过程-fuck
create or replace procedure fuck(idd innumber default 7)
as
itid number(38);
itexpire varchar2(100);
begin
select accountid,expire into itid,itexpirefrom weibo_account where accountid=idd;
DBMS_OUTPUT.PUT_LINE('id is='||itid||'itexpire is='||itexpire);
end;
--执行
--一个in类型 参数
exec fuck(7);
----------------------------------------------------------------------------------------
--存储过程-fuck2
create or replace PROCEDURE fuck2(get outnumber)
as
begin
select count(*) into get fromWEIBO_ACCOUNT;
end;
--执行
--传递getnumber给存储过程,此参数是out类型,接受存储过程的返回值;参考存储过程--fuck2
declare
getnumber number(10);
begin
fuck2(getnumber);
DBMS_OUTPUT.put_line('count='||getnumber);
end;
----------------------------------------------------------------------------------------
--存储过程-phonetest
create or replace PROCEDURE phonetest(phonein out varchar2)
as
begin
phone:='010-'||phone;
end;
--执行
--phone 既是in类型 ,又是out类型,传入phone,又接收回值;参考存储过程-phonetest
declare
phone varchar2(20);
begin
phone:='6855102';
phonetest(phone);
DBMS_OUTPUT.PUT_line('new phone='||phone);
end;
----------------------------------------------------------------------------------------
附其他sql命令: (详细参考 见
|-删除存储过程:drop procedure存储过程名;
|--查看所有存储过程与函数
exec sp_stored_procedures
或者
select * from dbo.sysobjects where OBJECTPROPERTY(id, N'IsProcedure') =1 order by name
|-查看存储过程的内容
select text from syscomments where id=object_id('存储过程名称')
--或者用
sp_helptext 存储过程名称
|-查看存储过程的参数情况
select '参数名称' = name,
'类型' = type_name(xusertype),
'长度' = length,
'参数顺序' = colid,
'排序方式' = collation
from syscolumns
where id=object_id('存储过程名称')
|-查看所有存储过程内容
select b.name ,a.text from syscomments a,sysobjects b where object_id(b.name)=a.id and b.xtype in('P','TR');
参考文献-1