Oracle:存储过程(一)

一:定义

所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。

二:创建

Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常
(1)无参存储过程语法

1
2
3
4
5
6
7
8
9
10
11
create or replace procedure NoParPro      
as   
    --声明语句段,局部变量,游标的声明等等。    
    ;     
begin   
    -- 执行语句段,具体业务逻辑。      
    ;      
exception   
    --存储过程异常处理语段。      
    ;      
end;

 (2)带参存储过程实例

1
2
3
4
5
6
7
8
9
create or replace procedure queryempname(sfindno emp.empno%type)      
as       
    sName emp.ename%type;  --    自定义字段名    表名.字段名%type      
    sjob emp.job%type;     
begin           
    ....     
exception            
    ....     
end;

 (3)带参数存储过程含赋值方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
create or replace procedure runbyparmeters   (isal in emp.sal%type,           
                                              sname out varchar,          
                                              sjob in out varchar) 
--(自定义参数名 in/out 表名.字段名%type)可以0-任意多个;IN表示输入参数OUT表示返回值参数    
as         
    icount number;      --可以给字段类型自定    
begin          
    select count(*) into icount from emp where sal>isal and job=sjob;           
    if icount=1 then            
    ....           
    else          
    ....          
    end if;     
exception          
    when too_many_rows then     --Oracle存储过程中要用到的标量等        
    DBMS_OUTPUT.PUT_LINE('返回值多于1行');          
    when others then         
    DBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS过程中出错!');     
end;

 

三:编译及查看

(1)编译

1
ALTER PROCEDURE 存储过程名 COMPILE;

 (2)查看

1
2
3
4
select * from all_source t
    where t.TYPE = 'PROCEDURE'
     and t.name = upper('存储过程名')
order by t.line;

 

四:执行

(1)如果是命令窗口就用exec 存储过程名:

1
EXEC  procedure;    --procedure是存储过程名

 (2)如果是PL/SQL窗口就用 begin  存储过程名  end:

1
2
3
begin         
    procedure;    --procedure是存储过程名       
end;

 (3)如果是程序中调用就用 call 存储过程名:

1
hibernateDao.excuteSqlUpdate("{Call proc_stuInfo()}");    //存储过程proc_stuInfo

五:删除

1
DROP PROCEDURE 存储过程名;

 

posted @   IT6889  阅读(74)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示