文章目录

  • 1 概述
  • 2 示例
  • 3 请注意

1 概述

1. 包的概念(1) 模块化的思想,用于分类管理过程(procedure)和函数(function)(2) 类似于 Java、Python 等语言中的 类(class)2. 包的组成(程序部署顺序:'先执行包头,再执行包体')(1) 包头:package(2) 包体:package body3. 授权: grant execute on 属主.包名 to 用户1, 用户n;4. 调用: '属主.包名.存储过程名()' 或 '属主.包名.方法名()'5. 建议(1) 数据库中所有的过程(procedure)和函数(function)都要用 package 进行封装:便于管理(2) 单个的过程(procedure)和函数(function)建议不超过 3000 行(3) 每个 package 在 create 时都要带上 '属主'(避免所处位置错误)

2 示例

效果截图示例:用户 hr 调用用户 scott 中的 package,来判断 某表 是否存在于 scott 中

包头:

CREATE OR REPLACE PACKAGE scott.pkg_public_toolkit ISPROCEDURE p_whether_table_exists(i_table_name IN sys.all_tab_comments.table_name%TYPE,o_flag       OUT VARCHAR2,o_message    OUT VARCHAR2);FUNCTION f_whether_table_exists(i_table_name IN sys.all_tab_comments.table_name%TYPE)RETURN VARCHAR2;
END pkg_public_toolkit;
/
GRANT EXECUTE ON scott.pkg_public_toolkit TO hr;

包体:

CREATE OR REPLACE PACKAGE BODY scott.pkg_public_toolkit IS-- *********************************************-- 功能说明: 判断用户 scott 中是否存在表-- 参数说明: i_table_name  表名 --           o_flag        程序执行标志,Y:成功,N:失败--           o_message     程序执行的描述信息-- 修改记录:create by yoyo 2020/10/14-- *********************************************PROCEDURE p_whether_table_exists(i_table_name IN sys.all_tab_comments.table_name%TYPE,o_flag       OUT VARCHAR2,o_message    OUT VARCHAR2) ISv_count NUMBER(1);BEGIN-- 判断依据:用户 scott 中是否存在表SELECT COUNT(1)INTO v_countFROM user_tab_comments ustWHERE ust.table_name = upper(i_table_name);-- 程序执行描述信息IF v_count >= 1 THENo_message := '存在';ELSEo_message := '不存在';END IF;-- 程序执行标识o_flag := 'Y';EXCEPTIONWHEN OTHERS THENo_flag := 'N'; -- 执行失败dbms_output.put_line(dbms_utility.format_error_backtrace); -- 报错的行号dbms_output.put_line(SQLCODE || ' : ' || SQLERRM); -- 报错的编号及内容END p_whether_table_exists;-- *********************************************-- 功能说明: 调用存储过程 p_whether_table_exists 的方法-- 参数说明:i_empno   部门编号--   返回值: i_table_name  表名-- 修改记录:create by yoyo 2020/10/14-- *********************************************FUNCTION f_whether_table_exists(i_table_name IN sys.all_tab_comments.table_name%TYPE)RETURN VARCHAR2 ISo_flag    VARCHAR2(2);o_message VARCHAR2(100);BEGINp_whether_table_exists(i_table_name => i_table_name,o_flag       => o_flag,o_message    => o_message);RETURN o_message;END f_whether_table_exists;
END pkg_public_toolkit;
/

创建完成后,在 PL/SQL 中也可以找到 Package 的位置:

3 请注意

1. 授权完成,仅表示 '用户n' 能够 '执行' 该 pkg,不能保证 '用户n' 能够查询该 pkg 中的 '对象(如:表)', 如图 3.12. package、procedure、function 声明时 is 和 as 的区别(1) 在 package、procedure、function 及自定义类型 type 时,as 和 is 一样,没区别(2) 在声明游标(cursor)时,只能使用 is 而不能使用 as(3) 在创建视图(view)时,只能使用 as 而不能使用 is 3. 规范:package、procedure、function 在结束时的 end 后面都要带上对应的名字只有匿名语句块的 end 后面才不带名字,如:beginpl/sql 语句;end;

图 3.1:用户 hr 查询表 scott.emp 报错

解决办法:授权
grant select on scott.emp to hr;
revoke select on scott.emp from hr; -- 回收权限。

Oracle 包详解(package)相关推荐

  1. Oracle 错误代码详解

    Oracle 错误代码详解及解决方式–ORA ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常. ORA-00017: 请求会话以设置跟踪事 ...

  2. Oracle ASM 详解 收藏

    Oracle ASM 详解 ASM:Automatic Storage Management, 是Oracle 主推的一种面向Oracle的存储解决方案, ASM 和 RDBMS 非常相似,ASM 也 ...

  3. Oracle 存储过程详解(上)

    目录 一.存储过程与存储函数的定义 二.创建 / 执行存储过程所需的权限 1.resource权限 2.create.execute procedure权限 三.创建 / 执行存储过程 四.变量与参数 ...

  4. Jar包详解和META-INF作用(…

    原文地址:Jar包详解和META-INF作用(创建可执行jar文件)--转帖作者:玉琪星兆 如 何把 Java 程序编译成 .exe 文件.通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然 ...

  5. IP协议及IP数据包详解

    本文转自至:https://blog.csdn.net/super_yc/article/details/72290931 回忆一下网络层的主要功能:通过TCP或者UDP协议绘制网络地图,数据包选取合 ...

  6. oracle首先创建三个表,oracle理论学习详解及各种简单操作例子(初学者必备)

    oracle理论学习详解及各种简单操作例子(菜鸟必备) 1.数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2.关于数据库的概念 DB:数据库(存储信 ...

  7. android jar 包 意见反馈功能,android重点jar包详解.docx

    android重点jar包详解 深入理解View(一):从setContentView谈起 我们都知道?MVC,在Android中,这个?V?即指View,那我们今天就来探探View的究竟.在onCr ...

  8. java axis2 jar_Java axis2.jar包详解及缺少jar包错误分析

    Java  axis2.jar包详解及缺少jar包错误分析 一.最小开发jar集 axis2 开发最小jar包集: activation-1.1.jar axiom-api-1.2.13.jar ax ...

  9. spring2.0和spring2.5及以上版本的jar包区别 spring jar 包详解

    spring jar 包详解 spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环 ...

  10. 【spring】jar包详解与模块依赖关系

    以spring3.X为例 jar包详解 1. spring-core.jar:包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心: 2. spri ...

最新文章

  1. Nginx 学习笔记(二)反向代理
  2. shop--10.店铺列表(前端)
  3. dio 上传文件报错_Vue+Element UI实现断点续传、分片上传、秒传
  4. Spring Cloud(一)Eureka Server-单体及集群搭建
  5. 实用ExtJS教程100例-002:MessageBox的三种用法
  6. SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59
  7. 浏览器使用java_java如何调用本地的浏览器
  8. 百度“追杀”66天后,景驰CEO王劲离职,原CTO韩旭接任
  9. linux搭建Django环境,linux下搭建python Django环境及启动一个示例
  10. android 内存分析工具_Android Camera内存问题剖析
  11. 使用 MSDeploy 部署网站
  12. iOS开发中那些高效常用的宏
  13. 分享ckplayerX2/ckplayerX1/dplayer/video.js/aliplayer/74player/xgplayer等自制网页播放器,高手勿喷,新手一定会喜欢的。你确定不进来看看。
  14. python怎么输出键值对_python 获取字典键值对的实现
  15. 西门子PLC编写抢答系统
  16. 20种最常见的网络安全攻击类型
  17. or-tools求解指派问题
  18. 二手车交易价格预测 ——EDA 探索性数据分析
  19. 《伯克毕生发展心理学3》
  20. 一文讲透商业智能BI 到底是什么[转]

热门文章

  1. 原来姹紫嫣红开遍 -- 牡丹亭·游园惊梦
  2. 精选1000个机械原理动图
  3. 前阿里云CTO章文嵩:怎样做开源才有意义?
  4. html页面中文本框的光标控制
  5. C++移动输出端的光标代码实现
  6. MAC——本机域名[localhost]配置
  7. 什么是公司Offer里的RSU?
  8. SPSS Modeler数据挖掘:回归分析
  9. java规则计算_亲属计算规则算法--java实现(关键算法摘要)
  10. macOS Big Sur 11.6 (20G165) 正式版 DMG、ISO、IPSW 下载