- 浏览: 629047 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
spring_springmvc:
java程序语言学习教程 地址http://www.zuida ...
java.math.BigDecimal类的用法 -
tuspark:
文章写的挺详细了,但是感觉太乱了,真不如这篇文章: BigDe ...
java.math.BigDecimal类的用法 -
u010040765:
感谢楼主分享,写的很详细,很容易看懂
Struts2中iterator标签遍历map总结 -
若无勇气终将褪去:
[flash=200,200][url][list][*][/ ...
java.math.BigDecimal类的用法 -
若无勇气终将褪去:
...
java.math.BigDecimal类的用法
一个完整的 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 ;
创建语法:
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 ;
发表评论
-
分区表创建
2012-02-10 14:52 1206--范围分区 -- Create table create t ... -
oracle connect by
2012-02-09 18:09 11829一、首先从一个经典的查询序列数例子入手: selec ... -
expdp和impdp
2012-02-09 17:15 14841,导出表数据 expdp liyongjie/liyongj ... -
sqlldr 工具
2012-02-09 16:21 1276小例子: sqlldr userid=liyongjie/li ... -
一道SQL题
2012-02-08 14:33 999有表如下(表名:score): Name Course Mar ... -
oracle 的连接
2009-11-09 21:08 1022Oracle的外连接(outer join):可以分为:左连接 ... -
oracle 備份與恢復案例
2009-10-12 10:54 897一. 理解什么是数据库 ... -
Oracle语句优化53个规则详解
2009-09-27 16:40 1104Oracle语句优化53个规则详解 1. 选用适合的ORACL ... -
Oracle的索引
2009-09-27 16:29 1362Oracle的索引 索引和对应的表应该位于不同的表空间 ... -
SQL Plus环境设置与常用命令
2009-09-27 15:50 2102SQL Plus环境设置与常用命令: set serverou ... -
Oracle的正则表达式
2009-09-27 08:28 2078Oracle的正则表达式 http://www.psoug.o ... -
Oracle developer的异常处理机制
2009-09-27 08:26 1223Oracle developer的异常处理机制 Oracle ... -
oracle優化提示
2009-09-27 08:24 10051. /*+ALL_ROWS*/ 表明對語句塊選擇基於開銷的優 ... -
ORACLE的临时表
2009-09-27 08:19 1314CREATE GLOBAL TEMPORARY TABLE T ... -
oracle学习笔记(第十八章:oracle & java)
2009-09-07 20:19 12631, 创建JAVA 外部例程: 1) 编制java代码 2) ... -
oracle学习笔记(第十七章:动态SQL)
2009-09-07 20:15 2516-- 动态 SQL -- 使用 dbms_sql 包 -- 步 ... -
oracle学习笔记(第十六章:oracle大对象)
2009-09-07 20:15 2614-- 大对象的使用 -- oracle 支持以下4种LOB数据 ... -
oracle学习笔记(第十五章:排程作业)
2009-09-07 20:14 2658--数据库作业:dbms_job -- d ... -
oracle学习笔记(第十十四章:批量绑定)
2009-09-07 20:13 1444-- 使用批量绑定来执行 DELETE DECLARE T ... -
oracle学习笔记(第十三章:自定义数据类型)
2009-09-07 20:12 6557---------------------用Oracle Ob ...
相关推荐
│ ORACLE学习笔记(二)oracle的逻辑结构 - lvhuiqing的专栏 - CSDN博客.mht.lnk │ ORACLE学习笔记(二)SQLPLUS基础 - lvhuiqing的专栏 - CSDN博客.mht │ ORACLE学习笔记(二)SQLPLUS基础 - lvhuiqing的专栏 - ...
第12章 存储过程和触发器 第13章 游标 第14章 任务调度 第15章 事务与锁定 第3篇 系统优化 第16章 数据库内存和进程的配置与优化 第17章 常用性能监测、分析和优化工具 第18章 对SQL语句进行分析和优化 第19...
020802_【第8章:包及访问控制权限】_访问控制权限及命名规范笔记.pdf 030901_【第9章:多线程】_认识多线程笔记.pdf 030902_【第9章:多线程】_线程常用操作方法笔记.pdf 030903_〖第9章:多线程〗_线程操作范例...
oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...
第十二章 Altering Tables and Constraints..142 第十三章 Creating Sequences..........145 第十四章 Creating View(创建视图)146 第十五章 Creating Indexes(创建索引).....148 第十六章 权限的授予与收回...........
第1课 轻松带你走进Oracle数据库的世界 第2课 从最简单的SQL语句开始 第3课 Oracle数据库的安装和配置 第4课 Oracle数据库的参数文件,控制文件...第12课 DBA日常工作内容和职责 第13课 Oracle的内存结构与后台进程
第十二章 Altering Tables and Constraints..142 第十三章 Creating Sequences..........145 第十四章 Creating View(创建视图)146 第十五章 Creating Indexes(创建索引).....148 第十六章 权限的授予与收回...........
丛书名: 学习笔记 出版社:清华大学出版社 ISBN:9787302282082 上架时间:2012-5-9 出版日期:2012 年5月 开本:16开 页码:564 版次:1-1 所属分类:计算机 > 软件与程序设计 > JAVA(J#) > Java 编辑推荐 ...
学习oracle时的学习心得。 第一天 1 安装出现的问题: 1 运行 2 第二天 4 表管理 5 第三天 6 简单查询 7 练习题 10 第四天 12 连接查询 12 数据分组 max,min,avg,sum,count 13 Oracle中的多表查询 14 Oracle-SQL-...
本文是由笔者2012年学习oracle数据库时编写的学习札记,其中的题目 多数为老师留下的思考题目。 我相信本文会对初学者使用oracle有一个初步的使用印象。右图为我所参 考的书籍。 第一讲 Oacle关系数据库 9 一....
like 'M%':M开头的 like '_a%':第二个字符是a的 like '%a%'所有含a的 (“_”表示一个任意字符;“%”表示任意多个任意字符。) 单引号里面的内容,大小写敏感。单引号用来限定字符串, 如果将值与串类型的列...
{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}操作符与实例}...
以“%”开头,[第几个数值$][flags][宽度][.精确度][格式] printf()的引入是为了照顾c语言程序员的感情需要 格式化输出 Formatter;格式化输入 Scanner;正则表达式 输出格式控制: 转义符: \ddd 1到3位8...
第12课 使用hibernate工具类将对象模型生成关系模型 19 第13课 ID主键生成策略 20 一、 Xml方式 20 元素(主键生成策略) 20 二、 annotateon方式 21 1、AUTO默认 21 2、IDENTITY 22 3、SEQUENCE 22 4、为Oracle指定...
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点左右公司接到一个客户的点话说,他使用我们的软件准备第二天的上机实践课的时候电脑忽然黑屏了,而且接下来就开不了机了。我们一听,觉得如果不是他的电脑出现故障的话就是我们的软件跟其他软件起冲突...