oracle过程函数和程序包

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

IF SQL%NOTFOUND THEN
RAISE e_no_rows;
END IF;
EXCEPTION
WHEN e_no_rows THEN
DBMS_OUTPUT.PUT_LINE(‘这雇员不存在’);
END;
l Exec update_sal(‘jarbus’,1500) 这雇员不存在
Exec 学习改变命运l,知 update_sal(‘allen’,1500)
学习改变命运,知 识创造未来
oracle过程函数和程序包
PL/SQL过程-建立带有输出参数的过程
通过使用输入参数,可以将数据或消息传递到调用环境和应用程序 。
当定义输出参数时,需要制定参数模式为OUT。 下面建立用于更新雇员工资并输出雇员姓名的过程update_sal为例

学习改变命运,知 识创造未来
COMPILE; l 查看过程 代码,通过查询数据字典
USER_SOURCE。
学习改变命运,知 识创造未来
oracle过程函数和程序包
导航
l PL/SQL过程 l PL/SQL函数 l PL/SQL包
学习改变命运,知 识创造未来
oracle过程函数和程序包
函数
l 函数是一种命名存储块,可以接收输入并进 行定义的逻辑处理以后把结果返回给调用者 。
’programmer’, 1, 7369, SYSDATE, 800, null, 30)
学习改变命运,知 识创造未来
oracle过程函数和程序包
PL/SQL过程-调用带有输出参数的过程
l 需要使用变量接受输出参数的数据值 DECLARE v_name empl.ename%TYPE; BEGIN update_sal(&eno,&salary,v_name); DBMS_OUTPUT.PUT_LINE(‘name:’||v_name); END; / 输入 雇员号的值: 1111 输入工资的值: 2500 姓名:lei
l 名称传递是指通过制定参数名为其提供变量或者数据 l 当使用名称传递时,需要使用=>为参数提供变量或者
数值 exec add_emp(empno=>3333,ebirghday=>,‘1989-2-2’,
indate=>null, egrade=>1, ename=>’JOHN’,ejob=>null,major=>null, salary=>null,allow=>null,deptno=>null)
END; /
学习改变命运,知 识创造未来
oracle过程函数和程序包
PL/SQL过程-建立带有输入参数的过程
通过使用输入参数,可以将应用程序数据传 递到过程。
当定义过程参数时,默认参数模式就是输入 参数
可以使用IN关键字显式定义输入参数。
学习改变命运,知 识创造未来
oracle过程函数和程序包
学习改变命运,知 识创造未来
oracle过程函数和程序包
PL/SQL过程-建立带有输入输出参数的过程
通过在过程中使用输入输出函数,可以调用过程 时输入数据到过程,在调用结束后输出数据到调 用环境和应用程序。
当定义输入输出参数时,需要指定参数模式为 IN OUT。
学习改变命运,知 识创造未来
oracle过程函数和程序包
学习改变命运,知 识创造未来
oracle过程函数和程序包
PL/SQL过程-使用组合传递为参数传递变量和数据
l 组合传递是指在调用子程序时结合使用位置传递和 名称传递
exec add_emp(4444, ‘1985-2-3’,’AGASI’ , ‘tester’,1, null, indate=>SYSDATE, salary=>1200, allow=>0, deptno=>30)
oracle过程函数和程序包
CREATE OR REPLACE PROCEDURE update_sal( eno varhcar2, sal NUMBER, name OUT VARCHAR2)
IS BEGIN
UPDATE empl SET salary=sal WHERE empno=eno RETURNING ename INTO name; END; /
CREATE OR REPLACE PROCEDURE devide( num1 IN OUT NUMBER,num2 IN OUT NUMBER)
IS v1 NUMBER; v2 NUMBER;
BEGIN v1:=TRUNC(num1/num2); v2:=MOD(num1,num2); num1:=v1; num2:=v2;
l 当使用位置传递时,必须为所有参数提供变量或 者输入数据
CALL add_empl(2222,‘1978-12-2’, ’alex’,NULL, 1 , NULL,SYSDATE,800,NULL,30);
学习改变命运,知 识创造未来
oracle过程函数和程序包
PL/SQL过程-使用名称传递为参数传递变量和数据
oracle过程函数和程序 包
学习改变命运,知 识创造未来
2021年2月17日星期三
目标
在完成本章学习后,你将掌握下列技能;
PL/SQL过程的定义与用法 PL/SQL函数的定义与用法 PL/SQL包的定义与用法
学习改变命运,知 识创造未来
oracle过程函数和程序包
Baidu Nhomakorabea
本章内容
l PL/SQL过程 l PL/SQL函数 l PL/SQL包
CREATE OR REPLACE PROCEDURE add_empl(
empno empl.empno%TYPE,ename empl.ename%TYPE, ebirthday empl.ebirthday%TYPE, egrade empl.egrade%TYPE, ejob empl.ejob%TYPE,emajor empl.emajor%TYPE, indate empl.indate%TYPE,salary empl.salary%TYPE,
egrade empl.egrade%TYPE DEFAULT 1,
major empl.mgr%TYPE, indate empl.indate%TYPE DEFAULT SYSDATE, salary empl.salary%TYPE DEFAULT 1000, allow empl.allow%TYPE DEFAULT 0, deptno empl.deptno%TYPE)
CREATE OR REPLACE PROCEDURE update_sal(
name empl.ename%TYPE, sal empl.salary%TYPE) IS e_no_rows EXCEPTION;
BEGIN
UPDATE empl SET salary=sal
WHERE LOWER(ename)=LOWER(name);
学习改变命运,知 识创造未来
oracle过程函数和程序包
为参数传递变量或数据
当为参数传递变量或数据,可以采用以下3种方法 • 位置传递 • 名称传 • 组合传递
学习改变命运,知 识创造未来
oracle过程函数和程序包
PL/SQL过程-使用位置传递为参数传递变量和数据
l 位置传递是指按照参数定义顺序依次为每个参数 提供变量或者数据值
l 语法:
CREATE [OR REPLACE] PROCEDURE procedure_name(argument1[mode1] datatype1,argument2[mode2] datatype2,…)
{IS|AS}
PL/SQL Block;
其中procedure_name指定过程名,argument指定过程 参数;IS或AS用于开始PL/SQL块。
学习改变命运,知 识创造未来
oracle过程函数和程序包
PL/SQL过程-过程开发示例
l 为过程参数指定默认值
CREATE OR REPLACE PROCEDURE add_emp(
empno empl,empno%TYPE, ebirthday empl.ebirthday%TYPE, ename empl.ename%TYPE, ejob empl.ejob%TYPE DEFAULT ‘programmer’,
学习改变命运,知 识创造未来
oracle过程函数和程序包
PL/SQL过程-建立无参数的过程
下面以建立用于输出当前日期和时间的过程 out_time为例。
CREATE OR REPLACE PROCEDURE out_time
IS BEGIN
DBMS_SESSION.SET_NLS(‘NLS_DATE_FOR MAT’,’’’YYYY-MM-DD HH24:MI:SS’’’); DBMS_OUTPUT.PUT_LINE(sysdate);
学习改变命运,知 识创造未来
oracle过程函数和程序包
PL/SQL过程-调用带有输入输出参数的过程
l 调用之前需要定义变量存放输入值,并在调用结束之后 使用变量输出数据。
DECLARE
n1 NUMBER:=&n1;
n2 NUMBER:=&n2;
BEGIN
divide(n1,n2); DBMS_OUTPUT.PUT_LINE(‘商:’||n1||’,余数:’||n2); END; / 输入n1的值:100 输入n2的值:30 商:3,余数10
l 与过程相似,只是函数必须有返回值。
学习改变命运,知 识创造未来
oracle过程函数和程序包
函数-创建
l 基本语法
CREATE [OR REPLACE] FUNCTION function_name [(parameter[{IN|IN OUT}] date_type1,parameter[{IN|IN OUT}] date_type2,…]
allow empl.allow%TYPE,deptno empl.deptno%TYPE) IS
BEGIN
INSERT INTO empl VALUES(empno,ebirthday,ename,ejob,egrade,emajor,indate, salary,allow,depno);
END;
RETURN return_type; {IS|AS}
declaration section BEGIN
IS
BEGIN
INSERT INTO emp VALUES(empno,ebirthday,ename,ejob,egrade major, indate, salary,allow, deptno);
END;
/ 学习改变命运,知
识创造未来
oracle过程函数和程序包
PL/SQL过程-使用异常处理

学习改变命运,知 识创造未来
oracle过程函数和程序包
PL/SQL过程-调用无参数的过程
l 直接引用过程名 exec out_time
学习改变命运,知 识创造未来
oracle过程函数和程序包
PL/SQL过程-调用带有输入参数的过程
l 需要为输入参数提供数据值 exec add_empl(1111, ’1980-3-4’, ’lei’,
识创造未来
oracle过程函数和程序包
PL/SQL过程-维护过程
l 删除过程 DROP PROCEDURE l 显示编译错误,查询数据字典USER_ERRORS
,或者执行SHOW ERRORS命令。 l 确定过程状态, 查询数据字典USER_OBJECTS
。 l 编译过程,ALTER PROCEDURE …
END; /
学习改变命运,知 识创造未来
oracle过程函数和程序包
PL/SQL过程-调用过程
l 在SQL*PLUS中调用过程时,需要使用CALL或者 EXECUTE命令;而在PL/SQL块中过程可以直接应用。
l 过程调用带参数分4种情况:
– 如果无参数,那么可以直接引用过程名; – 如果有输入参数,那么需要为输入参数提供数值; – 如果带有输出参数,那么需要使用变量接收输出结果; – 如果有输入输出参数,那么调用时需要使用具有输入值的变量
学习改变命运,知 识创造未来
oracle过程函数和程序包
导航
l PL/SQL过程 l PL/SQL函数 l PL/SQL包
学习改变命运,知 识创造未来
oracle过程函数和程序包
PL/SQL过程
l 过程是指用于执行特定操作的PL/SQL块
l 通过使用过程,不仅可以简化客户应用的开发和维护 ,而且可以提高应用程序的运行性能。
相关文档
最新文档