【PLSQL】package包的使用

************************************************************************
  ****原文:blog.csdn.net/clark_xu 徐长亮的专栏
************************************************************************

包package

package是一个可以将相关对象存储在一起的PLSQL结构,Package包含两个分量的组成部分:specification包声明,body(声明中的程序实现,包体)。每个部分都单独的存储在数据字典中。包声明时一个操作的接口,对应用来说是可见的。包体是黑盒,对应用来说隐藏了实现的细节

包的组成包括:

过程,函数,变量,游标(定义一条sql语句),类型(定义符合类型),常量,异常

包的优点:

---方便对应过程和函数的组织,解决命名冲突

---方便对过程和函数的组织:不改变包的声明定义,改变包的包体;

---限制过程和函数的依赖性

---在包体为实现时候,其他程序可以钓鱼保重的对象,对自己程序进行编译;

---方便对过程和函数的安全性管理:包的访问授权只需一次性授权,区分公共过程和私有过程;

---改善性能:在包首次被调用的时候,一个整体全部放入内存,减少多次调用的磁盘IO;

3.8.1 匿名块

--过程和函数只能在本匿名块中调用,例如;

declare

v_n1 number :=1;

function fun1 (p_in number ) return number ls

begin

return p_in

end;

procedure proc1 ls

begin

dbms_output.put_lin(fun1(v_n1));

end;

begin

proc1;

end;

3.8.2 package的语法

包头声明:

create or replace package pkg_name {ls | as }

公共变量(varibale)的定义;

公共类型(type)的定义;

公共游标(cursor)的定义;

函数说明;

过程说明;

end;

--package body声明的语法;

create or replace package body pkg_name

ls | as

--调用一次执行一次

函数实现

--调用一次执行一次

过程实现

begin

--初始化代码

--首次调用包中任意对象执行一次

end;

3.8.3 包Package的使用

包的声明

create or replace  packeage pkg1

ls

--公共类型

type t_rec is record

(m1 number,m2 varchar2(10));

--公共变量

v_rec t_rec ;

--公共过程

procedure proc1;

--公共函数

function fun1(p_in number) return number;

end

包体的实现

create or replace  packeage pkg1

ls

--实现过程

procedure proc1

ls

begin

dbms_outpurt.put_lin(v_rec.m1);

end;

--实现函数

function fun1(p_in number) return number

ls

begin

return p_in

end;

--初始化代码

begin

v_rec.m1 :=100;

end;

调用package

begin

pkg1.v_rec.m1 :=pkg1.fun1(10);

pkg1.proc1;

end;

************************************************************************
  ****原文:blog.csdn.net/clark_xu 徐长亮的专栏
************************************************************************
时间: 2024-08-11 03:38:30

【PLSQL】package包的使用的相关文章

PLSQL Package包的使用

创建包头 create or replace package pak_kingsql is procedure pro_kingsql(p_one in varchar2,p_two out varchar2,p_three in out varchar2); function f_nianxin(v_sal in emp.sal%type)return number; end; / 创建包体 create or replace package body pak_kingsql is proce

PLSQL Package dubug方法

初步接触EBS代码修改,花了几个小时搞明白了Package的debug方法, 1.打开需要测试的package,找到需要测试的过程,右键选择测试 2.在测试窗口中初始化过程的入参,点击测试按钮开始调试, 本文展现了如何初始化表类型数据的入参,首先创建了一个测试表cux_soa_customer_test,然后录入数据,使用 SELECT * BULK COLLECT INTO custom_info_rec from cux_soa_customer_test; 对参数进行初始化. 可根据不同类

JavaSE入门学习17:Java面向对象之package(包)

一Java包(package) 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间. 包的作用: A把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. B如同文件夹一样,包也采用了树形目录的存储方式.同一个包中的类名字是不同的,不同的包中的类的名字是 可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别.因此,包可以避免名字冲突. C包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类. Java使用包(package)这种机制是为了防止命名冲突

批量修改Java类文件中引入的package包路径

http://libeey.blogbus.com/logs/101848958.html当复制其他工程中的包到新工程的目录中时,由于包路径不同,出现红叉,下面的类要一个一个修改包路径,类文件太多的话就比较麻烦了,如何批量改变包路径解决这个问题? 方法一: Ctrl+h >> file serach >> 输入原包名(类型为*.java)>>Replace>>找到后输入要替换的包名 然后自己选择是全部替换还是部分替换. 方法二: 直接修改出错的类所在的包的名

Java学习笔记——位运算符、方法、package包、键盘输入

位运算符: a>>b = a左移b位 = a*2^2 右移舍去低位 方法: method,function,与c函数类似 package包: 通常第一句 写域名倒着写 package --; 主要包: java.lang 核心类string.math.Integer.System.Thread等 java.awt 构建管理GUI java.net 网络相关 java.io 输入输出 java.util 定义系统特性.使用与日期日历相关的函数 (详见api) 键盘输入: 使用别的包的类需要imp

为什么default package包里面的方法不能被其他包调用

为什么defalut package 包里面的方法不能被其他包调用呢? 原因是defalut是默认的意思: default package是缺省包.也就是defalut package 是没有名字的包.其它的包如果要调用缺省包中的类,必须插入包名.但是缺省包却无名,所以不能够直接调用! 原文地址:https://www.cnblogs.com/ccq-190203/p/10393541.html

vs2012 提示 未能正确加载 "Visual C++ Language Manager Package" 包 的解决办法

vs2012 提示 未能正确加载 "Visual C++ Language Manager Package" 包 的解决办法 来源 https://www.cnblogs.com/zhangdongsheng/p/5846790.html 1.  点击 vs2012菜单栏 工具-> Visual Studio 命令提示 打开命令窗口 2. 输入命令  "devenv /Setup" 3. 重新打开 vs2012 Windows PowerShell 版权所有

oracle plsql 上对package 包执行重新编译时,超时无响应:(4021)time-out occurred while waiting to lock object

问题处理过程: 开发反应包存在问题, 我一看他们的用户没对应的权限,给赋予了以下权限: GRANT debug any procedure, debug connect session TO CMSOPR; GRANT EXECUTE any procedure TO CMSOPR; 开发进行调试后没执行结果. 于是我想重新编译,先重新编译的包,半天报个响应超时,当时也没想太多,以为有死锁,于是查数据库锁 -没锁. 查数据库审计表: select * from dba_audit_trail w

如何理解和使用Java package包

Java中的一个包就是一个类库单元,包内包含有一组类,它们在单一的名称空间之下被组织在了一起.这个名称空间就是包名.可以使用import关键字来导入一个包.例如使用import java.util.*就可以导入名称空间java.util包里面的所有类.所谓导入这个包里面的所有类,就是在import声明这个包名以后,在接下来的程序中可以直接使用该包中的类.例如: [java] view plain copy import java.util.* public class SingleImport