存储过程都是放在包下,先看下总建立包的步骤
1。建立包的说明
createor replace package EMPLOYEE_PKG
as
procedure PRINT_ENAME;
end EMPLOYEE_PKG;
2.建立包体
CREATEOR REPLACE PACKAGE BODY employee_pkg as
Procedure print_ename is
Begin
Dbms_output.put_line('ss');
End print_ename;
Endemployee_pkg;
(一)过程的定义:
这些命名的PL/SQL块成为存储过程和函数,他们的集合、称为程序包。
存储过程
· 存储于数据库中的函数,过程是数据库对象。叫存储过程
· 存储过程经编译和优化后存储在数据库服务器中,使用时只要调用即可
我们可以命名我们的PL/SQL块,并为他们确定参数,存储在数据库中。这样可以从任何数据库客户端或者工具引用和运行他们,比如SQL*PLUS, Pro*C, JDBC。
(二)优点:
1. 可重用性:一旦命名并保存在数据库中后,任何应用都可以
2. 抽象和数据隐藏..
3. 可保证数据的安全性和完整性。
4. 存储过程的能力大大增强了SQL语言的功能和灵活
性。存储过程可以用流控语句编写,有很强的灵
活性,可以完成复杂的判断和较复杂的运算。
(三)语法:
CREATE OR REPLACE
PROCEDURE name [ (parameter [,parameter,…] ) ] IS //或AS
[说明:变量定义于此]
BEGIN
执行语句序列
[EXCEPTION
例外处理程序
END [name ];
用户通过create or repalce语句可以建立存储于服务器端的存储过程。存储过程不能用于sql语句。(Procedures cannot be used in SQLstatements;)
Procedure有0或多个参数,参数可是(IN), output (OUT), (IN OUT)
类型.
执行存储过程
set serveroutputon
/
直接执行:
execute my_proc
exec my_proc
(四)过程里要返回一个结果集,.就必须要用到游标了!用游标来处理这个结果集.
PL/SQL游标:
A:分类:
1:隐式游标:非用户明确声明而产生的游标. 你根本看不到cursor这个关键字.
2:显示游标:用户明确通过cursor关键字来声明的游标.
B:什么是隐式游标:
1:什么时候产生:
会在执行任何合法的SQL语句(DML---INSERTUPDATE DELETE DQL-----SELECT)中产生.他不一定存放数据.也有可能存放记录集所影响的行数.
如果执行SELECT语句,这个时候游标会存放数据.如果执行INSERT UPDATE DELETE会存放记录影响的行数.
C:隐式游标叫什么名字:
名字叫sql
关于sql的游标变量到底有哪些呢?
作用:返回最近一次执行SQL语句所涉及的游标相关信息.因为每执行一次SQL语句,都会产生一个隐式游标.那么当前执行的SQL语句就是当前的隐式游标.
sql%found
sql%notfound
sql%rowcount
sql%isopen
ORACLE使用REF游标返回结果集 , REF是一种引用类型,类似于指针。
create or replaceprocedure pro_shuijs(gh in varchar2, RC1 INOUT globalPkg.RCT1) is
begin
OPEN RC1 FOR
select a.zgbhao00 ,a.xming000,GZHJI000+je000000,nvl(SYBXIAN0,0)+nvl(YBAO0000,0)+nvl(YLBXIAN0,0)+nvl(GJJIN000,0) ,
je000000 补充保险,a.sdshui00 税金
from rlvgzsjx2 a ,rltrsdawhxxb,rltdygzlsb c, rlvwcylgj1 d
where a.zgbhao00=c.zgbhao00(+) and
a.zgbhao00=d.zgbhao00(+) and a.nyue0000=d.nyue0000(+) and
a.zgbhao00=b.zgbhao00(+) and a.zgbhao00=gh ;
end pro_shuijs;
举报/反馈