- 浏览: 178505 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
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 2202--创建用户 create user han identifi ... -
Oracle EBS Item Import 物料导入 (2) 源代码 成功执行
2012-08-24 10:56 5534CREATE OR REPLACE PACKAGE PkgIm ... -
Oracle 体系结构
2012-08-20 17:29 1030数据库(Database) 数据库是一个数据的集合,不仅 ... -
instr()函数,特殊用法,代替like,in
2012-08-20 17:19 5419--created by : wanglin --cre ... -
Oracle PL/SQL 常用函数总结
2012-08-20 14:02 1673--created by : wanglin --cre ... -
MERGE 使用例子
2012-08-17 17:01 1096--MERGE <Usage Case> --P ... -
内存表使用
2012-08-16 16:46 1734一、 内存表概念 1、PL/SQL表类似于C语言中的 ... -
临时表的使用方法
2012-08-16 15:48 1629临时表的使用方法: 创建 Oracle 临 ... -
Oracle EBS 二次开发 FND_GLOBAL PACKAGE 返回全局变量
2012-08-10 10:52 3055这个包,可以应用于你的 PL/SQL 中! 这个包 ... -
如何定义一个简单的Concurrent Program
2012-08-09 15:08 1050Oracle Apps R12下如何定义一个简单的Hello ... -
SQL Loader 导入Excel数据到Oracle数据库
2012-08-09 08:48 16871、 将需要上传的数据在Excel中整理好,通过“另存为 ... -
Oracle EBS 常用表 查询语句
2012-07-24 11:29 27488ORACLE EBS常用表查询语句 1. ... -
aaa
2012-07-13 14:25 0sdsdfas > http:/ ... -
Oracle_PL_ SQL_ 教程:函数
2012-07-12 21:32 1198--############################# ... -
Oracle_PL_ SQL_ 教程:错误和异常
2012-07-13 08:44 7740--############################# ... -
Oracle_PL_ SQL_ 教程:控制语句(条件语句、循环语句)
2012-07-12 21:27 1025--############################# ... -
Linux下Oracle存储过程调用Java程序(含外部包)
2012-07-13 10:03 6834一、描述: 用Java编写了一个导入Excel数 ... -
Oracle_PL_ SQL_ 教程:存储过程
2012-07-11 23:19 2998--############################# ... -
Oracle_PL_ SQL_ 教程:游标
2012-07-11 23:12 953--############################# ... -
Oracle存储过程中调用JAVA程序【转载】
2012-07-11 23:00 1120Oracle存储过程中调用JAVA程序 软件环境 ...
相关推荐
python学习资源
jfinal-undertow 用于开发、部署由 jfinal 开发的 web 项目
基于Andorid的音乐播放器项目设计(国外开源)实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。
python学习资源
python学习资源
python学习一些项目和资源
【毕业设计】java-springboot+vue家具销售平台实现源码(完整前后端+mysql+说明文档+LunW).zip
HTML+CSS+JavaScarip开发的前端网页源代码
python学习资源
【毕业设计】java-springboot-vue健身房信息管理系统源码(完整前后端+mysql+说明文档+LunW).zip
成绩管理系统C/Go。大学生期末小作业,指针实现,C语言版本(ANSI C)和Go语言版本
1_基于大数据的智能菜品个性化推荐与点餐系统的设计与实现.docx
【毕业设计】java-springboot-vue交流互动平台实现源码(完整前后端+mysql+说明文档+LunW).zip
内容概要:本文主要探讨了在高并发情况下如何设计并优化火车票秒杀系统,确保系统的高性能与稳定性。通过对比分析三种库存管理模式(下单减库存、支付减库存、预扣库存),强调了预扣库存结合本地缓存及远程Redis统一库存的优势,同时介绍了如何利用Nginx的加权轮询策略、MQ消息队列异步处理等方式降低系统压力,保障交易完整性和数据一致性,防止超卖现象。 适用人群:具有一定互联网应用开发经验的研发人员和技术管理人员。 使用场景及目标:适用于电商、票务等行业需要处理大量瞬时并发请求的业务场景。其目标在于通过合理的架构规划,实现在高峰期保持平台的稳定运行,保证用户体验的同时最大化销售额。 其他说明:文中提及的技术细节如Epoll I/O多路复用模型以及分布式系统中的容错措施等内容,对于深入理解大规模并发系统的构建有着重要指导意义。
基于 OpenCV 和 PyTorch 的深度车牌识别
【毕业设计-java】springboot-vue教学资料管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
此数据集包含有关出租车行程的详细信息,包括乘客人数、行程距离、付款类型、车费金额和行程时长。它可用于各种数据分析和机器学习应用程序,例如票价预测和乘车模式分析。
把代码放到Word中,通过开发工具——Visual Basic——插入模块,粘贴在里在,把在硅基流动中申请的API放到VBA代码中。在Word中,选择一个问题,运行这个DeepSeekV3的宏就可以实现在线问答
【毕业设计】java-springboot+vue机动车号牌管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
【毕业设计】java-springboot-vue交通管理在线服务系统的开发源码(完整前后端+mysql+说明文档+LunW).zip