- 浏览: 176203 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
SanFrans:
很不错的资料,谢谢分享
Oracle EBS 常用表 查询语句 -
Vity:
楼主坚持下去
Android学习指南基础--第一讲:Android开发环境的搭建【附件有图】 -
拥抱变化之美:
楼主的治学精神值得称赞。
C# 4.0 并行计算部分(附件有图) -
overloving:
fangjindan 写道
这个是绝对可行的哈,我测试通 ...
Linux下Oracle存储过程调用Java程序(含外部包) -
fangjindan:
Linux下Oracle存储过程调用Java程序(含外部包)
--######################################-- --包 --王林 2012.07.06 --######################################-- /* 包可以将一些有联系的对象放在其内部。任何能在块定义部分出现的对象都可以在包中出现。这些对象包括存储过程、函数、游标、自定义的类型和变量。可以在其他的块中引用包中的这些对象,因此,包提供了全局变量。一个包由两个独立的部分组成--包头和包体。各部分被单独地存放在数据字典中。定义一个包,要分别定义包头和包体。存储过程或者函数必须在包头中预定义。即在包头中仅定义存储过程或函数以及他们的参数,存储过程或函数的执行代码将在包体中定义。 这不同于无名块中定义存储过程和函数。包体是一个数据字典对象。只有在包头成功编译后,包体才能被编译。包体只包含包头中已预定义的子程序的代码。在包头中定义的对象(不是预定义的)的对象可以直接在包体中使用,不必在包体中定义。如果在包头中有预定义的子程序,则在包体中必须编写其子程序代码,而且包头和包体两部分的子程序必须一致,这包括相同的子程序名、参数和参数类型。与变量类似,包也可以被初始化。只是初始化部分定义在包体的最后部分被定义。 */ --######################################-- --前向引用 --前向引用占位程序让PL/SQL单遍分析器将过程B的声明放在他的标识符列表中 --JAVA采用的是双遍分析器,所以不用前向声明 DECLARE --如果将过程B的前向引用去掉,程序引发ORA-00313错误 --因为单遍分析器是自上向下读取的,在分析器读取过程B之前添加B的声明。 --当分析器读取过程A时,他知道有过程B的声明,然后分析器对过程A的调用验证有效性,以后再在程序中查找B的实现,从而编译成功。 PROCEDURE b (caller VARCHAR2); PROCEDURE a (caller VARCHAR2) IS procedure_name VARCHAR2 (1) := 'A'; BEGIN DBMS_OUTPUT.put_line( 'Procedure ''a'' called by [' || caller || '].'); b(procedure_name); END; PROCEDURE b (caller VARCHAR2) IS procedure_name VARCHAR2 (1) := 'B'; BEGIN DBMS_OUTPUT.put_line( 'Procedure ''b'' called by [' || caller || '].'); END; BEGIN a( 'Main' ); END; --执行结果: Procedure 'a' called by [Main]. Procedure 'b' called by [A]. --######################################-- --包头 | 包规范原型 --包规范原型列出的所有组件都是可选的,因为没有任何组件也可以创建包 --在包头声明过的是外部可以调用的过程、函数、变量 --包头是必须的,包体是可选的 --包头必须在包体前创建,否则创建不了包体 CREATE [OR REPLACE] PACKAGE package_name [AUTHID] {DEFINER | CURRENT_USER} IS | AS [type_definition;] [procedure_specification;] [function_specification;] [variable_declaration;] [exception_declaration;] [cursor_delaration;] [progma_delaration;] END package_name; --######################################-- --包体 --包体是一个独立于包头的数据字典对象,包体只能在包头完成编译后才能编译 --包体内部还可以包括具有包体全局属性的附加声明部分,但这些附加说明对于包体外部是不可见的 CREATE [OR REPLACE] PACKAGE package_name AS --全局变量定义; --函数定义; --过程定义; END package_name; --######################################-- --创建包头 CREATE OR REPLACE PACKAGE demo_package IS --包含了一个公用的过程和变量 g_comm NUMBER := 0.10; PROCEDURE reset_comm(p_comm IN NUMBER); --注释掉也可以,但是在外部不能调用该函数 /*FUNCTION validate_comm(p_comm IN NUMBER) RETURN BOOLEAN;*/ END; --创建包体 CREATE OR REPLACE PACKAGE BODY demo_package IS FUNCTION validate_comm(p_comm IN NUMBER) RETURN BOOLEAN IS v_max_comm NUMBER; BEGIN SELECT MAX(a.empno) INTO v_max_comm FROM scott.emp a; IF (p_comm > v_max_comm) THEN RETURN (FALSE); ELSE RETURN (TRUE); END IF; END validate_comm; PROCEDURE reset_comm(p_comm IN NUMBER) IS BEGIN IF validate_comm(p_comm) THEN g_comm := p_comm; ELSE raise_application_error(-20210 , 'Expresion is not avilable'); END IF; DBMS_OUTPUT.put_line('This is the globle variable:' || g_comm); END reset_comm; END demo_package; --SQL Command->编译->执行: exec demo_package.reset_comm(0); --执行结果: This is the globle variable:0 --SQL Command->编译->执行: exec demo_package.reset_comm(999999); --执行结果: begin demo_package.reset_comm(999999); end; ORA-20210: Expresion is not avilable ORA-06512: at "SYSTEM.DEMO_PACKAGE", line 23 ORA-06512: at line 2 --查看包内的代码 SET pagesize 49999; COLUMN line format 99999 heading "Line#"; COLUMN text format A73 heading "Text"; SELECT line , text FROM User_Source WHERE UPPER(NAME) = UPPER('&input_name'); --######################################-- --变量 --默认情况下,包是不连续的,当第一个用户调用之后,并不能保证第二个用户调用的仍然是同一个包 --当没有在包规范中声明共享变量或游标时,这个默认情况是很有用的,因为函数和过程是可以重用的。 --当包中含有共享变量时,应总是使包连续可重用 --PRAGMA SERIALLY_REUSABLE (预编译指令)只能在包上下文使用,必须在包规范和主体中都使用它。 --当要共享变量时, PRAGMA SERIALLY_REUSABLE很重要,因为他能保证每次调用他们都处于初始状态。 --E.g:测试共享变量 CREATE OR REPLACE PACKAGE demo_variables IS --把PRAGMA SERIALLY_REUSABLE放在包规范中,将包定义为连续可重用,那么该案例结果永远是3 --之所以这样,是因为每次对包的调用都会得到一个最新的副本。连续可重用包会重新初始化共享变量的值。 --常量和连续可重用变量之间的唯一区别是常量的值是永远不能改变,而变量的值是可以改变的 --当包为连续可重用时,接下来对包的任何调用就不会再改变值 --包变量应当总是常量 /*PRAGMA SERIALLY_REUSABLE;*/ protecte CONSTANT NUMBER := 1; unprotecte NUMBER := 1; END demo_variables; -- CREATE OR REPLACE PROCEDURE demo_change(n_value NUMBER) IS PRAGMA AUTONOMOUS_TRANSACTION; BEGIN demo_variables.unprotecte := demo_variables.unprotecte + n_value; Dbms_Output.put_line(demo_variables.unprotecte); END demo_change; --执行下去依次递增 --SQL Command->编译->执行: exec demo_change(2); --执行结果: 3 --######################################-- --类型 --%:属性指示器 --%ROWTYPE: 将变量的数据类型锚定到数据库目录对象上或PL/SQL记录结构的行结构上。当锚定到目录对象上时,新变量继承了在引用表或视图中列的位置和数据类型。新变量继承了显式PL/SQL记录结构的位置和数据结构,而该位置和数据类型可能是间接的从一个或多个目录对象继承的。 --%TYPE: 将变量的数据类型锚定到在数据库目录对象(表或视图)中列的数据类型。
发表评论
-
Oracle 基本建表语句
2012-11-15 14:12 2183--创建用户 create user han identifi ... -
Oracle EBS Item Import 物料导入 (2) 源代码 成功执行
2012-08-24 10:56 5514CREATE OR REPLACE PACKAGE PkgIm ... -
Oracle 体系结构
2012-08-20 17:29 988数据库(Database) 数据库是一个数据的集合,不仅 ... -
instr()函数,特殊用法,代替like,in
2012-08-20 17:19 5397--created by : wanglin --cre ... -
Oracle PL/SQL 常用函数总结
2012-08-20 14:02 1623--created by : wanglin --cre ... -
MERGE 使用例子
2012-08-17 17:01 1076--MERGE <Usage Case> --P ... -
内存表使用
2012-08-16 16:46 1713一、 内存表概念 1、PL/SQL表类似于C语言中的 ... -
临时表的使用方法
2012-08-16 15:48 1618临时表的使用方法: 创建 Oracle 临 ... -
Oracle EBS 二次开发 FND_GLOBAL PACKAGE 返回全局变量
2012-08-10 10:52 3028这个包,可以应用于你的 PL/SQL 中! 这个包 ... -
如何定义一个简单的Concurrent Program
2012-08-09 15:08 1030Oracle Apps R12下如何定义一个简单的Hello ... -
SQL Loader 导入Excel数据到Oracle数据库
2012-08-09 08:48 16631、 将需要上传的数据在Excel中整理好,通过“另存为 ... -
Oracle EBS 常用表 查询语句
2012-07-24 11:29 26869ORACLE EBS常用表查询语句 1. ... -
aaa
2012-07-13 14:25 0sdsdfas > http:/ ... -
Oracle_PL_ SQL_ 教程:函数
2012-07-12 21:32 1178--############################# ... -
Oracle_PL_ SQL_ 教程:错误和异常
2012-07-13 08:44 7726--############################# ... -
Oracle_PL_ SQL_ 教程:控制语句(条件语句、循环语句)
2012-07-12 21:27 1009--############################# ... -
Linux下Oracle存储过程调用Java程序(含外部包)
2012-07-13 10:03 6799一、描述: 用Java编写了一个导入Excel数 ... -
Oracle_PL_ SQL_ 教程:存储过程
2012-07-11 23:19 2986--############################# ... -
Oracle_PL_ SQL_ 教程:游标
2012-07-11 23:12 933--############################# ... -
Oracle存储过程中调用JAVA程序【转载】
2012-07-11 23:00 1111Oracle存储过程中调用JAVA程序 软件环境 ...
相关推荐
这个“Oracle PL-SQL.rar”压缩包提供了针对初学者的Oracle PL/SQL语言教程,包含丰富的源代码示例和详细的解说,旨在帮助学习者快速掌握这一技能。 PL/SQL全称为Procedural Language/Structured Query Language,...
Oracle_Sql_Pl_Sql_性能优化.doc Oracle_Sql_Pl_Oracle_Sql_Pl_Sql_性能优化.docSql_性能优化.doc Oracle_Sql_Pl_Sql_性能优化.doc
ORACLE_PL_SQL实例精解(原书第4版),含书签,共617页
本资料包"SQL(oracle).rar"显然是针对Oracle数据库系统,特别是其SQL语法和PL/SQL编程的深入学习总结。 首先,Oracle SQL与标准SQL略有不同,它包含了一些特定于Oracle的功能,如子查询、连接操作、游标、函数和...
Oracle PL/SQL是一种强大的编程语言,它将关系数据库管理系统的强大功能与结构化查询语言(SQL)的灵活性相结合。在Oracle数据库环境中,PL/SQL被广泛用于开发存储过程、函数、触发器、游标和包,以实现复杂的业务...
在IT行业中,Oracle数据库系统是企业级数据管理的首选,而PL/SQL是Oracle数据库的内置编程语言,用于实现复杂的数据库操作和业务逻辑。本文将深入探讨如何利用PL/SQL结合Web技术来构建一个功能丰富的网上商店。我们...
Oracle2BPL-SQL.rar_oracle_pl/sql这个压缩包文件可能包含了关于Oracle PL/SQL的基础教程资料,其中的Oracle2BPL-SQL.pdf可能是详细的讲解文本。 Oracle PL/SQL由三部分组成:Procedural Language(过程语言)、...
Oracle PL/SQL是Oracle数据库系统中的重要组成部分,用于开发存储过程、函数、触发器等数据库对象,以及执行复杂的SQL操作。以下是对Oracle PL/SQL及其相关知识点的详细说明: 1. **Oracle数据库基础**:Oracle...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作能力和过程性编程语言的控制结构。在"Oracle PL/SQL"这本书中,作者深入浅出地探讨了这一语言的核心概念和实用技巧,尤其适合法语...
标题中的“PLSQL.rar_oracle_pl sql_plsql_plsql_java_sql”暗示了这是一个关于Oracle数据库中PLSQL使用的资源包,可能包含了PLSQL的教程、示例代码和与Java集成的相关信息。Oracle数据库是世界上最广泛使用的数据库...
教程名称:Oracle 11g PL.SQL系列培训视频【27集】课程目录:【】oracle_PL_SQL编程1【】oracle_PL_SQL编程2【】oracle_PL_SQL编程3【】oracle_PL_SQL编程4【】oracle_PL_SQL编程5【】oracle_PL_SQL编程6【】oracle_...
这个压缩包文件"Oracle_Database_11g_SQL_-_Master_SQL_and_PLSQL_in_the_Oracle_Database"似乎包含了一本关于掌握Oracle 11g SQL和PL/SQL的教程资料。 SQL(结构化查询语言)是用于管理和操作数据库的标准语言,而...
**PL/SQL:Oracle数据库的编程语言** PL/SQL,全称为Procedural Language/Structured Query Language,是Oracle数据库系统中的一个重要的编程组件,它结合了SQL(结构化查询语言)的查询功能与过程性编程语言的特点...
标题中的"Allround_Automations_PL-SQL_Developer__Language_Packs_Downloadly.ir.rar"指出,这是一款名为"Allround Automations PL-SQL Developer"的软件的多语言包下载。PL/SQL是Oracle数据库系统中用于编写存储...
Oracle PL/SQL是一种强大的编程语言,它将关系数据库的强大功能与高级编程语法相结合,用于在Oracle数据库环境中构建复杂的业务逻辑和应用程序。Oracle8是PL/SQL的一个早期版本,尽管现在可能已经更新到了更高版本,...
ORACLE_PL_SQL实例精解 第五部分
这篇“Oracle PL-SQL入门教程(经典)”旨在帮助初学者掌握这个强大的工具。 SQL,全称为Structured Query Language,是一种标准化的语言,用于管理和处理关系型数据库。它主要由以下几个部分组成: 1. **数据查询**...
本文将深入探讨在PL/SQL中Oracle的函数、过程、包以及事务管理。 首先,让我们了解一下PL/SQL中的函数。函数是一段可重用的代码块,它接收参数,执行特定任务,并返回一个值。在Oracle中,你可以创建自定义函数,以...
Oracle 10g PL/SQL 是Oracle数据库系统中用于创建和管理存储过程、函数、触发器等数据库对象的编程语言。本教程旨在为初学者提供一个全面的学习平台,同时也为经验丰富的开发者提供参考资料。PL/SQL是Oracle特有的...