oracle存储过程代码实例一(8)

2019-08-30 21:24

BEGIN

DBMS_OUTPUT.PUT_LINE('提示信息:'||V_MESSAGE); END SHOW_MESSAGE;

------------------------ 判断雇员是否存在函数 ------------------- FUNCTION EXIST_EMP(P_EMPNO NUMBER) RETURN BOOLEAN IS

V_NUM NUMBER; --局部变量 BEGIN

SELECT COUNT(*) INTO V_NUM from EMP WHERE EMPNO=P_EMPNO; IF V_NUM=1 THEN RETURN TRUE; ELSE

RETURN FALSE; END IF;

END EXIST_EMP; ----------------------------- END EMP_PK; 结果为: Sql代码 程序包已创建。 程序包主体已创建。 程序包已创建。 程序包主体已创建。 步骤2:初始化包: Sql代码

SET SERVEROUTPUT ON

EXECUTE EMP_PK.INIT(6000,600); SET SERVEROUTPUT ON

EXECUTE EMP_PK.INIT(6000,600); 显示为: Sql代码

提示信息:初始化过程已经完成! 提示信息:初始化过程已经完成! 步骤3:显示雇员列表: Sql代码

EXECUTE EMP_PK.LIST_EMP; EXECUTE EMP_PK.LIST_EMP; 显示为: Sql代码

姓名 职务 工资 SMITH CLERK 1560 ALLEN SALESMAN 1936 WARD SALESMAN 1830 JONES MANAGER 2975 ...

雇员总人数:14

PL/SQL 过程已成功完成。 姓名 职务 工资 SMITH CLERK 1560 ALLEN SALESMAN 1936 WARD SALESMAN 1830 JONES MANAGER 2975 ...

雇员总人数:14

PL/SQL 过程已成功完成。 步骤4:插入一个新记录: Sql代码

EXECUTE EMP_PK.INSERT_EMP(8001,'小王','CLERK',1000); EXECUTE EMP_PK.INSERT_EMP(8001,'小王','CLERK',1000); 显示结果为: Sql代码

提示信息:雇员8001已插入! PL/SQL 过程已成功完成。 提示信息:雇员8001已插入! PL/SQL 过程已成功完成。

步骤5:通过全局变量V_EMP_COUNT查看雇员人数: Sql代码 BEGIN

DBMS_OUTPUT.PUT_LINE(EMP_PK.V_EMP_COUNT); END; BEGIN

DBMS_OUTPUT.PUT_LINE(EMP_PK.V_EMP_COUNT); END; 显示结果为: Sql代码 15

PL/SQL 过程已成功完成。 15

PL/SQL 过程已成功完成。 步骤6:删除新插入记录: Sql代码

EXECUTE EMP_PK.DELETE_EMP(8001); EXECUTE EMP_PK.DELETE_EMP(8001); 显示结果为: Sql代码

提示信息:雇员8001已删除! PL/SQL 过程已成功完成。 提示信息:雇员8001已删除! PL/SQL 过程已成功完成。 再次删除该雇员: Sql代码

EXECUTE EMP_PK.DELETE_EMP(8001); EXECUTE EMP_PK.DELETE_EMP(8001); 结果为: Sql代码

提示信息:雇员8001不存在,不能删除! 提示信息:雇员8001不存在,不能删除! 步骤7:修改雇员工资: Sql代码

EXECUTE EMP_PK.CHANGE_EMP_SAL(7788,8000); EXECUTE EMP_PK.CHANGE_EMP_SAL(7788,8000); 显示结果为: Sql代码

提示信息:工资超出修改范围! PL/SQL 过程已成功完成。 提示信息:工资超出修改范围! PL/SQL 过程已成功完成。

步骤8:授权其他用户调用包:

如果是另外一个用户要使用该包,必须由包的所有者授权,下面授予STUDEN账户对该包的使用权: Sql代码

GRANT EXECUTE ON EMP_PK TO STUDENT; GRANT EXECUTE ON EMP_PK TO STUDENT;

每一个新的会话要为包中的公用变量开辟新的存储空间,所以需要重新执行初始化过程。两个会话的进程互不影响。 步骤9:其他用户调用包。

启动另外一个SQL*Plus,登录STUDENT账户,执行以下过程: Sql代码

SET SERVEROUTPUT ON

EXECUTE SCOTT.EMP_PK. EMP_PK.INIT(5000,700); SET SERVEROUTPUT ON

EXECUTE SCOTT.EMP_PK. EMP_PK.INIT(5000,700); 结果为: Sql代码

提示信息:初始化过程已经完成! PL/SQL 过程已成功完成。 提示信息:初始化过程已经完成! PL/SQL 过程已成功完成。

说 明:在初始化中设置雇员的总人数和修改工资的上、下限,初始化后V_EMP_COUNT为14人,插入雇员后V_EMP_COUNT为15人。 V_EMP_COUNT为公有变量,所以可以在外部程序中使用DBMS_OUTPUT.PUT_LINE输出,引用时用 EMP_PK.V_EMP_COUNT的形式,说明所属的包。而私有变量V_MAX_SAL和V_MIN_SAL不能被外部访问,只能通过内部过程来修 改。同样,EXIST_EMP和SHOW_MESSAGE也是私有过程,也只能在过程体内被其他模块引用。

注意:在最后一个步骤中,因为STUDENT模式调用了SCOTT模式的包,所以包名前要增加模式名SCOTT。不同的会话对包的调用属于不同的应用,所以需要重新进行初始化。 练习

1.如果存储过程的参数类型为OUT,那么调用时传递的参数应该为: A.常量 B.表达式 C.变量 D.都可以 2.下列有关存储过程的特点说法错误的是: A.存储过程不能将值传回调用的主程序 B.存储过程是一个命名的模块 C.编译的存储过程存放在数据库中

D.一个存储过程可以调用另一个存储过程 3.下列有关函数的特点说法错误的是: A.函数必须定义返回类型 B.函数参数的类型只能是IN

C.在函数体内可以多次使用RETURN语句 D.函数的调用应使用EXECUTE命令 4.包中不能包含的元素为: A.存储过程 B.存储函数 C.游标 D.表

5.下列有关包的使用说法错误的是: A.在不同的包内模块可以重名 B.包的私有过程不能被外部程序调用 C.包体中的过程和函数必须在包头部分说明 D.必须先创建包头,然后创建包体


oracle存储过程代码实例一(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:环己烷过氧化物分解技术

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: