目录
程序单元
即为程序单元,相当于其他高级编程语言中的函数或者子过程,具体的可以分为存储过程、函数、包和触发器4种。
存储过程由来
很多复杂的SQL块只能使用一次且不会被存储在数据库中;
使用时,在一个存储过程中调用另外一个存储过程主要是出于代码重用的目的。
存储过程(procedure)用于在数据库种完成特定的操作或者任务,PL/SQL中使用DDL指令create procedure创建或覆盖定义存储过程,语法:
create [or replace] procedure <procedure_name> [形参1,形参2...] // 外界传入的形参 IS AS [本地变量声明] //本地变量的声明 Begin <执行语句> //执行的SQL代码块 [Exception <异常处理代码>] End [<procedure_name>]; |
如果在存储过程创建过程中系统提示出现编译错误,可使用Show errors指令查看详细的错误提示信息,
eg: SQL>show errors;
存储过程的调用:
Execute <procedure_name>;
或者Exec <procedure_name>
删除存储过程 Drop procedure <procedure_name>;
存储过程中参数类型及默认值
与高级编程语言中函数的形参类似,PL/SQL存储过程借助于过程参数实现与调用环境之间的数据传递,二者的差别在于,高级编程语言中的函数形参都是单向传递数据的(函数仅用于接收从外界调用环境传入的数据,再通过函数返回值江处理结果返回/输出到调用环境),而SQl存储过程的参数却分别是IN、OUT、IN OUT 3中模式。
IN参数:(默认为IN模式)
用于在过程被调用时接收外界(调用环境)传递进来的数据值,相当于传统的形参。
注意:IN模式参数被作为以赋值的常量对待,因而不可以在过程体中再对其进行赋值操作。
OUT参数:
用于在过程执行完毕时将处理结果返回给调用环境,OUT参数相当于未赋值的变量,因要在过程执行结束时将其返回值返回给调用者,故必须在过程体代码执行过程中为OUT模式参数赋值。此外,调用过程时与OUT模式参数相对应的实参必须是变量(无论赋值与否),否则,使用常量或表达式的话,将因无法保存返回值而出错。
IN OUT参数:
是IN模式和OUT模式的结合,一般不建议使用。
--------创建过程 create or replace procedure mp4(v_name IN VARCHAR,v_age OUT NUMBER) AS BEGIN SELECT age into v_age from mytable where name=v_name; END; ---------调用过程: DECLARE v1 number; BEGIN mp4('Tom',v1); UPDATE mytable set age=(v1+2 2) where name ='Tom'; END; |