- 浏览: 176942 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
SanFrans:
很不错的资料,谢谢分享
Oracle EBS 常用表 查询语句 -
Vity:
楼主坚持下去
Android学习指南基础--第一讲:Android开发环境的搭建【附件有图】 -
拥抱变化之美:
楼主的治学精神值得称赞。
C# 4.0 并行计算部分(附件有图) -
overloving:
fangjindan 写道
这个是绝对可行的哈,我测试通 ...
Linux下Oracle存储过程调用Java程序(含外部包) -
fangjindan:
Linux下Oracle存储过程调用Java程序(含外部包)
--######################################-- --函数 --王林 2012.07.06 --######################################-- --PL/SQL中有值传递和引用传递函数,两种函数都返回输出值。 --函数输出值可以是任何SQL或PL/SQL数据类型 --可以在SQL语句中使用返回SQL数据类型的函数,返回PL/SQL数据类型的函数只能用于PL/SQL/块中。 --例外的是:不能在SQL查询中调用包含DML操作的存储函数,如果这样做会引发ORA-14551错误,说明不能在查询中使用DML --不过,可在插入、更新和删除中调用执行DML操作的函数 --函数也可以包含嵌套命名块(他们是局部函数和过程)。可以在函数的声明块中定义命名块,同样可以在执行块中嵌套命名块。 --三种模式的形参:只读参数IN模式,只写形参OUT模式,用于读写形参的IN OUT模式 --通用形式: CREATE [OR REPLACE] FUNCTION fun_name [( arg1 [IN][OUT][NOCOPY] sql_datatype | plsql_datatype , arg2 [IN][OUT][NOCOPY] sql_datatype | plsql_datatype )] RETURN { sql_datatype | plsql_datatype } --PRAGMA必须在包规范而不是在包主体中定义,一个函数只能有一个PRAGMA, [ AUTHID [ DEFINER ] [ CURRENT_USER ]] [ DETERMINISTIC | PARALLEL_ENABLE ] [ PIPELINED ] --ORACLE11g引入跨会话结果缓存,通过RESULT_CACHE字句定义函数可以实现这一功能。对这些函数的每一个调用存储实参和结果。当函数被再次调用时,就可以寻找跨会话缓存中的结果,避免代码再次运行。其结果存储在SGA中。 [ RESULT_CACHE [ RELIES_ON table_name ]] { IS | AS } BEGIN execution_statements RETURN VARIABLE; [ EXCEPTION ] exception_handling_statements END [ fun_name ]; --######################################-- /* (1)DETERMINISTIC字句:用于保证函数对于任何输入总是以相同的方式工作,这一类型的保证要求函数不从外数据源(如包或者数据库) 读或者写数据。只有确定性函数(DETERMINISTIC function)工作在物化视图和基于函数的索引中。对于用于SQL语句字句(如WHERE、 ORDER BY或GROUP BY)中的用户定义的函数,或者SQL对象类型方法(MAP或ORDER)来说,他们是被推荐的方法。 确定性函数通常用完全相同的方式处理参数。这意味着不管你提交什么值,函数都以相同的方式工作,不应对包变量或来自数据库的数据有内部依赖性*/ --Demo1:计算投资的现值: CREATE OR REPLACE FUNCTION pv ( future_value NUMBER , periods NUMBER , interest NUMBER ) RETURN NUMBER DETERMINISTIC IS BEGIN RETURN future_value/((1+interest)**periods); END pv; --SQL Command->编译->执行: var res NUMBER call pv(10000,5,6) into :res; --结果: Method called res --------- 0.594990182661986 --######################################-- /* (2)PARALLEL_ENABLE字句:让函数支持并行查询能力。这一类型的保证要求函数不从外数据源(如包或者数据库)读或者写数据。 可以考虑为并行操作指定安全的函数以提高吞吐量,但ORACLE11g优化器也可能在认为函数对于并行操作来说安全时才运行未指定的函数。 JAVA方法和任何外部C程序对于并行操作来说从来都是不安全的。 物化视图:和关系数据库中的标准视图不一样,物化视图是缓存的结果集。作为缓存的结果集,他存储为具体表、 物化视图对查询能作出更快的响应,因为他不要求每次都用资源动态构建视图。代价就是物化视图通常有些过时,因为从视图缓存时到被访问时, 底部数据可能发生了改变,如果底层数据表不是很频繁的改变,而查询速度很重要,可以考虑使用物化视图,比如数据库仓库。 */ --Demo2:下列函数支持并行SQL操作,将姓、名和中间名合并为单个字符: CREATE OR REPLACE FUNCTION pv ( last_name VARCHAR2 , first_name VARCHAR2 , middle_initial VARCHAR2) RETURN VARCHAR2 PARALLEL_ENABLE IS BEGIN RETURN last_name || ',' || first_name || ' ' || middle_initial; END; --SQL Command->编译->执行: SELECT pv(last_name , first_name, middle_initial) AS full_name FROM contact ORDER BY last_name,first_name,middle_initial; --并行操作并不总发生,对于较小的数据集来说,并行操作是昂贵的。ORACLE11G优化器会判断何时以并行模式运行操作。有时,如果函数没有标记为启用并行,则优化器也会并行运行他。 --######################################-- --函数参数的几种形式 --######################################-- --1.没有参数的函数 --Demo3: CREATE OR REPLACE FUNCTION get_user RETURN VARCHAR2 IS v_user VARCHAR2 (20); BEGIN SELECT a.username INTO v_user FROM user_users a WHERE ROWNUM < 2; RETURN v_user; END get_user; --###################### --调用函数时有形参的时候要括号,没有形参的时候不要括号 --函数用于返回特定数据。执行时的找一个变量接收函数的返回值 --调用方法1:SQL窗口 SELECT get_user FROM dual; --调用方法2:命令窗口 var v_name varchar2(50) exec :v_name := get_user; --调用方法3:SQL窗口 exec dbms_output.put_line('The user is:'||get_user); --######################################-- --2.带有IN参数的函数 --Demo4: CREATE OR REPLACE FUNCTION pv(v_id IN NUMBER) RETURN VARCHAR2 AS v_name VARCHAR2 (50); BEGIN SELECT a.ename INTO v_name FROM scott.emp a WHERE a.empno = v_id; RETURN v_name; EXCEPTION WHEN no_data_found THEN raise_application_error(-20001, ' ID is wrong'); END pv; --调用方法1:SQL窗口 SELECT pv(7536) FROM dual; --调用方法2:命令窗口 exec dbms_output.put_line(pv(7536)); --######################################-- --3.带out参数的函数 --Demo5: CREATE OR REPLACE FUNCTION get_info ( e_name VARCHAR2 , job OUT VARCHAR2 ) RETURN NUMBER IS res NUMBER; BEGIN SELECT a.sal , a.job INTO res , job FROM scott.emp a WHERE a.ename = e_name; RETURN (res); END get_info; --SQL Command窗口->编译->执行: var job varchar2(20) var dname varchar2(20) exec :dname := get_info('SCOTT',:job) --######################################-- --4.带in out参数的函数 --Demo6: CREATE OR REPLACE FUNCTION demo ( num1 NUMBER , num2 IN OUT NUMBER ) RETURN NUMBER IS v_result NUMBER (6); v_remainder NUMBER; BEGIN v_result := num1 / num2; v_remainder := MOD (num1 , num2); num2 := v_remainder; RETURN (v_result); EXCEPTION WHEN zero_divide THEN raise_application_error (-20000 , 'you have made one 0' ); END demo; --SQL Command->编译->执行: var result1 NUMBER; var result2 NUMBER; exec :result2 :=30 --执行结果: PL/SQL procedure successfully completed result2 --------- 30 --继续->执行: SQL> EXEC :result1 := demo (100 , :result2); --执行结果: PL/SQL procedure successfully completed result1 --------- 3 result2 --------- 10 --######################################-- /* 函数调用限制 1、SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数。 2、SQL只能调用带有输入参数,不能带有输出,输入输出参数的函数。 3、SQL不能使用PL/SQL的特有数据类型(boolean,table,record等)。 4、SQL语句中调用的函数不能包含INSERT,UPDATE和DELETE语句。 */
发表评论
-
Oracle 基本建表语句
2012-11-15 14:12 2190--创建用户 create user han identifi ... -
Oracle EBS Item Import 物料导入 (2) 源代码 成功执行
2012-08-24 10:56 5521CREATE OR REPLACE PACKAGE PkgIm ... -
Oracle 体系结构
2012-08-20 17:29 1011数据库(Database) 数据库是一个数据的集合,不仅 ... -
instr()函数,特殊用法,代替like,in
2012-08-20 17:19 5407--created by : wanglin --cre ... -
Oracle PL/SQL 常用函数总结
2012-08-20 14:02 1650--created by : wanglin --cre ... -
MERGE 使用例子
2012-08-17 17:01 1085--MERGE <Usage Case> --P ... -
内存表使用
2012-08-16 16:46 1720一、 内存表概念 1、PL/SQL表类似于C语言中的 ... -
临时表的使用方法
2012-08-16 15:48 1621临时表的使用方法: 创建 Oracle 临 ... -
Oracle EBS 二次开发 FND_GLOBAL PACKAGE 返回全局变量
2012-08-10 10:52 3038这个包,可以应用于你的 PL/SQL 中! 这个包 ... -
如何定义一个简单的Concurrent Program
2012-08-09 15:08 1036Oracle Apps R12下如何定义一个简单的Hello ... -
SQL Loader 导入Excel数据到Oracle数据库
2012-08-09 08:48 16721、 将需要上传的数据在Excel中整理好,通过“另存为 ... -
Oracle EBS 常用表 查询语句
2012-07-24 11:29 26955ORACLE EBS常用表查询语句 1. ... -
aaa
2012-07-13 14:25 0sdsdfas > http:/ ... -
Oracle_PL_ SQL_ 教程:包
2012-07-12 21:30 1012--############################# ... -
Oracle_PL_ SQL_ 教程:错误和异常
2012-07-13 08:44 7732--############################# ... -
Oracle_PL_ SQL_ 教程:控制语句(条件语句、循环语句)
2012-07-12 21:27 1013--############################# ... -
Linux下Oracle存储过程调用Java程序(含外部包)
2012-07-13 10:03 6814一、描述: 用Java编写了一个导入Excel数 ... -
Oracle_PL_ SQL_ 教程:存储过程
2012-07-11 23:19 2991--############################# ... -
Oracle_PL_ SQL_ 教程:游标
2012-07-11 23:12 942--############################# ... -
Oracle存储过程中调用JAVA程序【转载】
2012-07-11 23:00 1116Oracle存储过程中调用JAVA程序 软件环境 ...
相关推荐
这个“Oracle PL-SQL.rar”压缩包提供了针对初学者的Oracle PL/SQL语言教程,包含丰富的源代码示例和详细的解说,旨在帮助学习者快速掌握这一技能。 PL/SQL全称为Procedural Language/Structured Query Language,...
`pl_sql`标签表明,这份资料可能包含了关于PL/SQL的基础和高级概念,比如块结构(DECLARE, BEGIN, END)、异常处理(TRY-CATCH)、游标处理、动态SQL以及如何调用Oracle数据库的内置函数和包。 `oracle_总结`标签...
在Oracle数据库环境中,PL/SQL被广泛用于开发存储过程、函数、触发器、游标和包,以实现复杂的业务逻辑和数据处理任务。本文将深入探讨Oracle PL/SQL的相关知识点,并结合Java进行集成开发。 1. **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...
1. **PL/SQL简介**:PL/SQL是Oracle数据库的内置编程语言,用于创建存储过程、函数、触发器和包。它的语法基于SQL,但增加了流程控制、异常处理和数据类型等特性。 2. **变量和数据类型**:PL/SQL支持多种数据类型...
这个压缩包文件"Oracle_Database_11g_SQL_-_Master_SQL_and_PLSQL_in_the_Oracle_Database"似乎包含了一本关于掌握Oracle 11g SQL和PL/SQL的教程资料。 SQL(结构化查询语言)是用于管理和操作数据库的标准语言,而...
标题中的“PLSQL.rar_oracle_pl sql_plsql_plsql_java_sql”暗示了这是一个关于Oracle数据库中PLSQL使用的资源包,可能包含了PLSQL的教程、示例代码和与Java集成的相关信息。Oracle数据库是世界上最广泛使用的数据库...
"PLSQL.zip_oracl_oracle pl/sql ppt_pl sql ppt tutorial_pl/sql plsql.ppt"这个压缩包提供了学习PL/SQL的基础材料,通过"第一章 pl-sql介绍.ppt"开始你的学习之旅,逐步探索这个强大而灵活的数据库编程语言。
### Oracle_PL(SQL)单行函数和组函数及使用 #### 一、概述 在Oracle数据库中,SQL 和 PL/SQL 提供了大量的内置函数,这些函数可以极大地提高开发效率和简化查询逻辑。根据处理数据的不同方式,这些函数可以分为...
Oracle PL/SQL是一种强大的编程语言,它将关系数据库的强大功能与高级编程语法相结合,用于在Oracle数据库环境中构建复杂的业务逻辑和应用程序。Oracle8是PL/SQL的一个早期版本,尽管现在可能已经更新到了更高版本,...
这篇“Oracle PL-SQL入门教程(经典)”旨在帮助初学者掌握这个强大的工具。 SQL,全称为Structured Query Language,是一种标准化的语言,用于管理和处理关系型数据库。它主要由以下几个部分组成: 1. **数据查询**...
本文将深入探讨在PL/SQL中Oracle的函数、过程、包以及事务管理。 首先,让我们了解一下PL/SQL中的函数。函数是一段可重用的代码块,它接收参数,执行特定任务,并返回一个值。在Oracle中,你可以创建自定义函数,以...
PL/SQL是Oracle数据库系统中用于编写存储过程、函数、触发器等数据库编程的结构化查询语言,扩展了SQL的功能,使得数据库管理员和开发人员能够进行更复杂的数据库操作和管理。Allround Automation PL-SQL Developer...
《ORACLE_PL_SQL实战精讲》是一本专为PL/SQL开发者设计的指南,它深入浅出地介绍了Oracle数据库中的编程语言PL/SQL。PL/SQL是Oracle数据库系统中的核心组件,用于创建复杂的业务逻辑和数据处理程序。本书旨在帮助...
Oracle 10g PL/SQL 是Oracle数据库系统中用于创建和管理存储过程、函数、触发器等数据库对象的编程语言。本教程旨在为初学者提供一个全面的学习平台,同时也为经验丰富的开发者提供参考资料。PL/SQL是Oracle特有的...
PL/SQL是Oracle数据库系统中的一个重要组成部分,它是一种结合了SQL与过程编程的语言,用于在Oracle环境中编写存储过程、函数、触发器等数据库对象。本资料主要涵盖了PL/SQL的基本语法以及数据的增删改查操作和视图...
Oracle PL/SQL 入门教程是针对初学者的教程,主要涵盖了如何使用PL/SQL这一Oracle数据库的编程语言。PL/SQL是Oracle数据库系统中的一种结构化查询语言,它结合了SQL的功能并增加了过程性编程元素,使得开发者能够...