- 浏览: 636935 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
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 1256--范围分区 -- Create table create t ... -
oracle connect by
2012-02-09 18:09 11878一、首先从一个经典的查询序列数例子入手: selec ... -
expdp和impdp
2012-02-09 17:15 15111,导出表数据 expdp liyongjie/liyongj ... -
sqlldr 工具
2012-02-09 16:21 1317小例子: sqlldr userid=liyongjie/li ... -
一道SQL题
2012-02-08 14:33 1070有表如下(表名:score): Name Course Mar ... -
oracle 的连接
2009-11-09 21:08 1057Oracle的外连接(outer join):可以分为:左连接 ... -
oracle 備份與恢復案例
2009-10-12 10:54 952一. 理解什么是数据库 ... -
Oracle语句优化53个规则详解
2009-09-27 16:40 1178Oracle语句优化53个规则详解 1. 选用适合的ORACL ... -
Oracle的索引
2009-09-27 16:29 1402Oracle的索引 索引和对应的表应该位于不同的表空间 ... -
SQL Plus环境设置与常用命令
2009-09-27 15:50 2147SQL Plus环境设置与常用命令: set serverou ... -
Oracle的正则表达式
2009-09-27 08:28 2113Oracle的正则表达式 http://www.psoug.o ... -
Oracle developer的异常处理机制
2009-09-27 08:26 1258Oracle developer的异常处理机制 Oracle ... -
oracle優化提示
2009-09-27 08:24 10301. /*+ALL_ROWS*/ 表明對語句塊選擇基於開銷的優 ... -
ORACLE的临时表
2009-09-27 08:19 1347CREATE GLOBAL TEMPORARY TABLE T ... -
oracle学习笔记(第十八章:oracle & java)
2009-09-07 20:19 13021, 创建JAVA 外部例程: 1) 编制java代码 2) ... -
oracle学习笔记(第十七章:动态SQL)
2009-09-07 20:15 2555-- 动态 SQL -- 使用 dbms_sql 包 -- 步 ... -
oracle学习笔记(第十六章:oracle大对象)
2009-09-07 20:15 2687-- 大对象的使用 -- oracle 支持以下4种LOB数据 ... -
oracle学习笔记(第十五章:排程作业)
2009-09-07 20:14 2690--数据库作业:dbms_job -- d ... -
oracle学习笔记(第十十四章:批量绑定)
2009-09-07 20:13 1479-- 使用批量绑定来执行 DELETE DECLARE T ... -
oracle学习笔记(第十三章:自定义数据类型)
2009-09-07 20:12 6622---------------------用Oracle Ob ...
相关推荐
### ORACLE经典学习笔记知识点概览 #### 第一章 ORACLE 命令 本章节主要介绍了Oracle数据库中常用的命令及其使用方法。 1. **查看参数文件**: `Desc v$parameter` - 这个命令用于查看Oracle的参数文件信息,通过...
以下是对Oracle数据库一些基础知识的详细解释,主要基于提供的个人学习笔记内容。 **第一节:数据库管理** 1. **创建用户**:`CREATE USER`命令用于创建新的数据库用户,如`CREATE USER username IDENTIFIED BY ...
│ ORACLE学习笔记(二)oracle的逻辑结构 - lvhuiqing的专栏 - CSDN博客.mht.lnk │ ORACLE学习笔记(二)SQLPLUS基础 - lvhuiqing的专栏 - CSDN博客.mht │ ORACLE学习笔记(二)SQLPLUS基础 - lvhuiqing的专栏 - ...
### Oracle学习笔记知识点详解 #### 一、SQL概述与Oracle简介 - **SQL**(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准语言。它被用来执行各种数据库操作,如查询数据、更新数据...
本"Oracle超强学习笔记"将带你深入探索Oracle的世界,掌握从基础到高级的各种技术,助你在数据库管理领域提升专业技能。 1. **Oracle简介** Oracle数据库是由美国甲骨文公司开发的关系数据库系统,其核心组件包括...
### Oracle学习笔记精要 #### 第一章:Oracle概述与启动方法 - **Oracle简介**:Oracle是由美国甲骨文公司开发的一款关系型数据库管理系统,广泛应用于企业级应用环境中。 - **Oracle版本演变**: - Oracle8i:...
### Oracle超详细学习笔记 #### 一、基本查询与数据操作 ##### 1. 最简单的查询 - **命令示例**: ```sql SELECT * FROM employees; DESC employees; SET LINESIZE 600; SET PAGESIZE 50; ``` - **解释**: ...
第12章 存储过程和触发器 第13章 游标 第14章 任务调度 第15章 事务与锁定 第3篇 系统优化 第16章 数据库内存和进程的配置与优化 第17章 常用性能监测、分析和优化工具 第18章 对SQL语句进行分析和优化 第19...
根据提供的内容,我们可以总结出以下关于Oracle学习的重要知识点: ### Oracle 学习笔记概览 #### 一、Oracle登录及基本操作 - **Unix环境下的登录:** - 使用`su-oracle`命令切换到Oracle用户。 - 输入密码:`...
第十章至第十五章:这些章节主要围绕单表查询、多表查询的各种类型展开,包括内连接(JOIN)、外连接(LEFT JOIN、RIGHT JOIN、FULL JOIN)、交叉连接(CROSS JOIN),以及子查询的使用,这些都是SQL查询中的核心...
在Oracle数据库的世界里,"玩转Oracle学习笔记(三)-Oracle操作"主要涵盖了数据库的管理和操作方面的知识。这篇笔记可能是博主韩顺平分享的一系列Oracle学习教程中的第三部分,通过阅读他的博客文章(博文链接:...
根据提供的“pb oracle 学习笔记”的部分内容,我们可以总结出一系列与PowerBuilder(简称PB)结合Oracle数据库操作相关的知识点。以下是对这些知识点的详细解读: ### 1. PowerBuilder 快捷键 - **关闭**: 使用`...
Oracle SQL是数据库管理员和开发人员在Oracle数据库系统中进行数据查询和管理的重要工具。这篇笔记主要涵盖了Oracle SQL的...这两份“Oracle SQL笔记”文档应包含了上述各个方面的详细解释和实例,值得仔细阅读和学习。
以下是对Oracle数据库课堂笔记的详细解析,涵盖了从基础到进阶的重要知识点。 第一讲:Oracle简介 Oracle数据库是由甲骨文公司开发的,提供了一整套数据存储、管理和检索解决方案。它支持多种操作系统和硬件平台,...
Oracle是世界上最广泛使用的数据库管理系统之一,尤其在企业级应用中占据主导地位。这款关系型数据库管理系统(RDBMS)以其...希望这本"Oracle学习笔记"能为初学者提供详尽的指导,帮助你们顺利踏入数据库管理的世界。
020802_【第8章:包及访问控制权限】_访问控制权限及命名规范笔记.pdf 030901_【第9章:多线程】_认识多线程笔记.pdf 030902_【第9章:多线程】_线程常用操作方法笔记.pdf 030903_〖第9章:多线程〗_线程操作范例...
### Oracle学习笔记(尚学堂版) #### 知识点概览 本篇Oracle学习笔记主要由尚学堂马士兵老师的教学内容整理而成,旨在为初学者提供一个系统的学习框架与实践指南。通过以下知识点的梳理,我们可以更好地理解...
以下是一些Oracle学习笔记中的关键知识点: 1. **远程访问Oracle数据库**:你可以通过URL `http://127.0.0.1:5560/isqlplus/` 来访问Oracle数据库,不论是自己的还是他人的,这表明Oracle提供了Web接口来操作数据库...