`
jeelee
  • 浏览: 629047 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

oracle学习笔记(第十二章:包)

阅读更多
一个完整的 package 应该有有包头 package 和 包体 package body 组成
创建语法:
Create or replace package pkg_name –创建包头
As
--定义包变量,procedure,function等; 
--包变量可以做为全局变量, procedure,function 在包头中之定义,并不写具体过程
--包头名称要和包体名称一致
End [pkg_name];--pkg_name可有可无

Create or replace package body pkg_name
As
--定义包变量,procedure,function等; 
-- procedure,function具体过程
--包头名称要和包体名称一致
End  [pkg_name];--pkg_name可有可无

包的重载﹐在包的内部过程和函数可以重载﹐即﹐可以有一个以上的名称相同施加在不同的对象上。
重载的限制﹐下列情况不算载﹕
1﹐参数仅在名称或类型上不同﹐不算重载
rocedure overload_pro(var1 in varcha2)与
procedure overload_pro(var1 out varcha2)不重载
2﹐参数属于同一类族﹐不算重载
procedure overload_pro(var1 in varcha2)与
   procedure overload_pro(var1 in char)步不算重载
3﹐仅返回值类型不同
procedure overload_pro(var1 in varcha2)  return date与
   procedure overload_pro(var1 in varcha2)  return number不算重载

--包的应用
--例子1
-- 创建包体
CREATE OR REPLACE PACKAGE pkg_test
AS
   v_var1 VARCHAR2(100);
   PROCEDURE p_1(i_var1 IN VARCHAR2,o_rtn OUT VARCHAR2);
   FUNCTION f_1(i_var1 IN VARCHAR2) RETURN VARCHAR2;
END pkg_test;
-- 创建包头
CREATE OR REPLACE PACKAGE BODY pkg_test
AS
   v_var2 VARCHAR2(100);
   PROCEDURE p_1(i_var1 IN VARCHAR2,o_rtn OUT VARCHAR2)
   AS
   BEGIN
     o_rtn :=v_var1;
     v_var2:='package procedure test';
     dbms_output.put_line(i_var1);
   END;
   FUNCTION f_1(i_var1 IN VARCHAR2) RETURN VARCHAR2
   AS
   v_var3 VARCHAR2(100);
   BEGIN
     v_var3:='package function test';
     dbms_output.put_line(i_var1);
     RETURN v_var3;
   END;
END ;
-- 调用
DECLARE
  v_var1 VARCHAR2(100);
  v_rtn  VARCHAR2(100);
BEGIN
   pkg_test.v_var1 := 'package var test';
   v_var1 :='this is a package test';
   pkg_test.p_1(v_var1,v_rtn);
   dbms_output.put_line('v_rtn='||v_rtn);
   v_var1 :='this is a package function test';
   v_rtn := pkg_test.f_1(v_var1);
   dbms_output.put_line(v_rtn);
END ;

--例子2
--创建包头
create or replace PACKAGE temp_package
as
   procedure update_emp_m(vemp_no in emp_m.emp_no%type,vemp_name in emp_m.emp_name%type);
   procedure update_emp_m(vemp_no in emp_m.emp_no%type,vemp_name in emp_m.emp_name%type,vemp_sex in emp_m.emp_sex%type);
end temp_package;
--创建包体
create or replace PACKAGE body temp_package
   as
      procedure update_emp_m(vemp_no in emp_m.emp_no%type,vemp_name in emp_m.emp_name%type)
           is
           begin
               update emp_m set emp_name=vemp_name where emp_no=vemp_no;
           end update_emp_m;
       --重载
      procedure update_emp_m(vemp_no in emp_m.emp_no%type,vemp_name in emp_m.emp_name%type,vemp_sex in emp_m.emp_sex%type)
           is
           begin
                update emp_m set emp_name=vemp_name,emp_sex=vemp_sex where emp_no=vemp_no;
           end update_emp_m;
   end temp_package;
--执行包
begin
temp_package.update_emp_m('0001','yongjie');
end;

begin
temp_package.update_emp_m('0001','yongjie.li','1');
end;
SELECT * FROM emp_m
--或者
begin
temp_package.update_emp_m('0001','lyjdb');
temp_package.update_emp_m('0001','yongjie.li','m');
end;
--向前声名(forward declarations)
--应用情况:函数(存储过程) A 调用函数(存储过程) B ,函数(存储过程) B 调用函数(存储过程) A
DECLARE
v_tempVal BINARY_INTEGER := 5;
-- forward decaration of procedure B
PROCEDURE B(p_counter IN OUT binary_integer);
PROCEDURE A(p_counter IN OUT BINARY_INTEGER) IS
BEGIN
DBMS_OUTPUT.put_line('A('||P_COUNTER||')');
IF p_counter > 0 THEN
B(p_counter);
p_counter := p_counter - 1;
END IF;
END A;
--
PROCEDURE B(p_counter IN OUT binary_integer) IS
BEGIN
    DBMS_OUTPUT.PUT_LINE('B('||P_COUNTER||')');
    p_counter := p_counter - 1;
    A(p_counter);
END B;
--
BEGIN
B(v_tempVal);
END;

包的辅助功能
--1共享缓冲区锁定:DBMS_SHAREDD_POOL
-- DBMS_SHAREDD_POOL允许把一个对象锁定在共享缓冲区中,当该对象被锁定以后,除非程序员申请对其清除
-- 否则不管共享缓冲区是否已满,或是否有程序访问 该对象,该对象将常驻在共享缓冲区中.这种方式有利于
-- 提高程序的运行效率.
-- DBMS_SHAREDD_POOL包有三个过程:DBMS_SHARED_POOL.KEEP,DBMS_SHARED_POOL.UNKEEP,DBMS_SHARED_POOL.SIZES
--DBMS_SHARED_POOL.KEEP过程语法:
PROCEDURE KEEP(NAME VARCHAR2,flag CHAR DEFAULT 'P');
-- 通过此过程可以锁定缓冲区中的对象,包,触发器,序列,和SQL语句都可以被锁定.但是独立的过程和函数不能锁定
-- 参数说明:
-- name:对象名称,可以是包名或是SQL语句相关联的标识符,SQL语句标识符是由试图$sqlarea中的字段hash_value
-- 和address连接组成
-- flag:决定对象的类型,如果是'P'则参数名name必须与包名相匹配,如果是'C'(光标),则nameN要带有sql语句的文本
-- 如果是'S',则name就是序列号,如果是'R',则name就是触发器
--DBMS_SHARED_POOL.UNKEEP过程语法:
PROCEDURE UNKEEP(NAME VARCHAR2,flag CHAR DEFAULT 'P');
-- 参数意义同KEEP过程
-- DBMS_SHARED_POOL.SZIES过程语法:
PROCEDURE SIZES(minsize NUMBER);

--dbms_lock.sleep(秒);
--程序睡眠10再执行
DECLARE
BEGIN
dbms_output.put_line(to_char(SYSDATE,'yyyymmddhh24miss'));
dbms_lock.sleep(10);
dbms_output.put_line(to_char(SYSDATE,'yyyymmddhh24miss'));
END ;

分享到:
评论

相关推荐

    Oracle 10g 学习笔记

    │ ORACLE学习笔记(二)oracle的逻辑结构 - lvhuiqing的专栏 - CSDN博客.mht.lnk │ ORACLE学习笔记(二)SQLPLUS基础 - lvhuiqing的专栏 - CSDN博客.mht │ ORACLE学习笔记(二)SQLPLUS基础 - lvhuiqing的专栏 - ...

    ORACLE学习笔记2:日常应用、深入管理、性能优化.

    第12章 存储过程和触发器 第13章 游标 第14章 任务调度 第15章 事务与锁定 第3篇 系统优化 第16章 数据库内存和进程的配置与优化 第17章 常用性能监测、分析和优化工具 第18章 对SQL语句进行分析和优化 第19...

    Java开发详解.zip

    020802_【第8章:包及访问控制权限】_访问控制权限及命名规范笔记.pdf 030901_【第9章:多线程】_认识多线程笔记.pdf 030902_【第9章:多线程】_线程常用操作方法笔记.pdf 030903_〖第9章:多线程〗_线程操作范例...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    Java/JavaEE 学习笔记

    第十二章 Altering Tables and Constraints..142 第十三章 Creating Sequences..........145 第十四章 Creating View(创建视图)146 第十五章 Creating Indexes(创建索引).....148 第十六章 权限的授予与收回...........

    炼数成金 课程+教材 Oracle数据库职业直通车-Oracle入门学习教学视频 谭怀远老师.txt

    第1课 轻松带你走进Oracle数据库的世界 第2课 从最简单的SQL语句开始 第3课 Oracle数据库的安装和配置 第4课 Oracle数据库的参数文件,控制文件...第12课 DBA日常工作内容和职责 第13课 Oracle的内存结构与后台进程

    J2EE学习笔记(J2ee初学者必备手册)

    第十二章 Altering Tables and Constraints..142 第十三章 Creating Sequences..........145 第十四章 Creating View(创建视图)146 第十五章 Creating Indexes(创建索引).....148 第十六章 权限的授予与收回...........

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    丛书名: 学习笔记 出版社:清华大学出版社 ISBN:9787302282082 上架时间:2012-5-9 出版日期:2012 年5月 开本:16开 页码:564 版次:1-1 所属分类:计算机 > 软件与程序设计 > JAVA(J#) > Java 编辑推荐   ...

    Oracle笔记

    学习oracle时的学习心得。 第一天 1 安装出现的问题: 1 运行 2 第二天 4 表管理 5 第三天 6 简单查询 7 练习题 10 第四天 12 连接查询 12 数据分组 max,min,avg,sum,count 13 Oracle中的多表查询 14 Oracle-SQL-...

    oracle数据库笔记

    本文是由笔者2012年学习oracle数据库时编写的学习札记,其中的题目 多数为老师留下的思考题目。 我相信本文会对初学者使用oracle有一个初步的使用印象。右图为我所参 考的书籍。 第一讲 Oacle关系数据库 9 一....

    2009达内SQL学习笔记

    like 'M%':M开头的 like '_a%':第二个字符是a的 like '%a%'所有含a的 (“_”表示一个任意字符;“%”表示任意多个任意字符。) 单引号里面的内容,大小写敏感。单引号用来限定字符串, 如果将值与串类型的列...

    Java学习笔记-个人整理的

    {12}Oracle数据库}{151}{chapter.12} {12.1}术语}{151}{section.12.1} {12.2}登录数据库}{151}{section.12.2} {12.3}创建表格}{152}{section.12.3} {12.4}关于null值}{154}{section.12.4} {12.5}操作符与实例}...

    整理后java开发全套达内学习笔记(含练习)

    以“%”开头,[第几个数值$][flags][宽度][.精确度][格式] printf()的引入是为了照顾c语言程序员的感情需要 格式化输出 Formatter;格式化输入 Scanner;正则表达式 输出格式控制: 转义符: \ddd 1到3位8...

    Hibernate笔记 马士兵

    第12课 使用hibernate工具类将对象模型生成关系模型 19 第13课 ID主键生成策略 20 一、 Xml方式 20 元素(主键生成策略) 20 二、 annotateon方式 21 1、AUTO默认 21 2、IDENTITY 22 3、SEQUENCE 22 4、为Oracle指定...

    asp.net知识库

    VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...

    计算机实习日记

    今天下午3点左右公司接到一个客户的点话说,他使用我们的软件准备第二天的上机实践课的时候电脑忽然黑屏了,而且接下来就开不了机了。我们一听,觉得如果不是他的电脑出现故障的话就是我们的软件跟其他软件起冲突...

Global site tag (gtag.js) - Google Analytics