- 浏览: 132055 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
qindongliang1922:
不错!
linux sort 命令 -
eve:
这个还真没注意,8错
protected访问权限又理解了一下 -
imp860124:
学习了。
struts ActionForward跳转添加参数
--子程序 /* 子程序是被命名的PL/SQL块,可以带参数,多次被调用,模块化 过程&&函数 过程:执行特定操作 函数:返回特定数据 定义: CREATE [OR REPLACE] PROCEDURE procedure_name(argument [mode] datatype...) IS|AS --这里可以声明一些变量,相当于declare块,不过没有declare关键字 BEGIN statement... END; -------******------- procedure_name 过程名 argument 参数名 mode 参数类型, IN 输入参数 || OUT 输出参数 ||IN OUT . 默认是输入参数 datatype 参数类型 ,不需要指定长度 */ --不带参数 CREATE OR REPLACE PROCEDURE p_time IS BEGIN dbms_output.put_line(sysdate); END; --调用 call p_time(); --默认IN型参数 CREATE OR REPLACE PROCEDURE emp_1(num int) AS v_name emp.ename%type; v_deptno emp.deptno%type; BEGIN IF num<10000 THEN--根据传入的参数,是否执行查询 select ename,deptno into v_name,v_deptno from emp where emp.empno=num; dbms_output.put_line(v_name||'--'||v_deptno); ELSE dbms_output.put_line('too big'); END IF; END; --调用 BEGIN emp_1(77880); END; --明确定义参数模式 /* IN read-only :pass values into 相当于一个常量 OUT write-only :pass values back 相当于一个变量 IN OUT read/write */ CREATE OR REPLACE PROCEDURE emp_count_1(v_deptid IN int,v_count OUT int)--一个IN,一个OUT IS BEGIN select count(emp.empno) into v_count from emp where emp.deptno=v_deptid; dbms_output.put_line(v_count); END; --调用 DECLARE v_count int; BEGIN --传递OUT类型的参数是传递一个类型相符的变量,因为out的类型的是要作为输出的,所以需要具体的变量来存放 emp_count_1(10,v_count); --传递参数默认按定义顺序,但也可以如下按照参数名称 emp_count_1(v_count=>v_count,v_deptid => 10); --当然也可以两种方式混合使用 emp_count_1(10,v_count => v_count); END; --感觉out的参数很麻烦的,还不如在过程内直接定义一个变量 CREATE OR REPLACE PROCEDURE emp_count_2(v_deptid IN INT) IS v_count int; BEGIN select count(emp.empno) into v_count from emp where emp.deptno=v_deptid; dbms_output.put_line(v_count); END; --调用 BEGIN emp_count_2(10); END; --过程调用过程 CREATE OR REPLACE PROCEDURE p_main IS BEGIN--调用上面定义的两个过程 p_time(); emp_count_2(10); END; --调用 BEGIN p_main(); END; --函数 /* 有返回值,其它的和过程差不多 CREATE [OR REPLACE] FUNCTION function_name(argument [mode] datatype...) RETURN datatype --返回类型必须 IS|AS [variable datatype...] BEGIN statement... Pl/SQL块中必须要有一条return语句 END; */ -- CREATE OR REPLACE FUNCTION get_name(u_id IN int) RETURN varchar2 AS v_name emp.ename%type; BEGIN select ename into v_name from emp where emp.empno=u_id; RETURN v_name; END; --调用 DECLARE v_name emp.ename%type; v_job emp.job%type; BEGIN v_name :=get_name(7788);--直接给变量赋值 select job into v_job from emp where ename=get_name(7788) and rownum<2;--在查询语句中调用 dbms_output.put_line(v_name); END; --返回record CREATE OR REPLACE FUNCTION get_record(pno in number) RETURN emp%rowtype IS v_record emp%rowtype; BEGIN select * into v_record from emp where empno=pno; return v_record; END; -- DECLARE v_record emp%rowtype; BEGIN v_record := get_record(7788); dbms_output.put_line(v_record.ename||'--'||v_record.job); END; --如果一个函数没有参数,那么调用他的时候可以不用加() --exp CREATE OR REPLACE FUNCTION get_num(v_id in int) RETURN INT IS CURSOR v_cs is select count(empno) tt,max(empno) mx from emp where emp.deptno=v_id group by deptno; v_num v_cs%rowtype; BEGIN OPEN v_cs; FETCH v_cs into v_num; dbms_output.put_line(v_num.tt||'--'||v_num.mx); close v_cs; RETURN v_num.tt; END; -- select get_num(10) from dual; --综合例子 --统计emp表中每个部门的人员 DECLARE --声明一个嵌套表用来存放要查询的部门编号 TYPE v_array IS VARRAY(5) OF INT; v_arr v_array; --声明一个嵌套表用来存放每一个部门的员工名字 TYPE v_list_type IS TABLE OF VARCHAR2(30); v_list v_list_type := v_list_type(); --声明一个函数 根据部门查询统计该部门的员工总数和员工名字 FUNCTION get_num(v_dpno IN INT) RETURN v_list_type IS v_num INT; v_i int :=1; v_name varchar2(30); v_names v_list_type := v_list_type(); TYPE v_cs_type IS REF CURSOR; v_cs v_cs_type; BEGIN --统计员工总数 select count(empno) into v_num from emp where emp.deptno= v_dpno; dbms_output.put_line('编号是:'||v_dpno||'的部门的员工数是:'||v_num); --查询该部门员工名字 OPEN v_cs FOR select ename from emp where emp.deptno =v_dpno; LOOP FETCH v_cs into v_name; EXIT WHEN v_cs%NOTFOUND; v_names.EXTEND; v_names(v_i) :=v_name; v_i :=v_i+1; END LOOP; RETURN v_names;--返回查询的员工的结果集 END; BEGIN v_arr :=v_array(10,20,30); FOR i in 1..v_arr.count LOOP v_list := get_num(v_arr(i)); FOR j in 1..v_list.COUNT LOOP dbms_output.put_line(v_list(j)); END LOOP; END LOOP; END; /* --输出结果 编号是:10的部门的员工数是:3 CLARK KING MILLER 编号是:20的部门的员工数是:5 SMITH JONES SCOTT ADAMS FORD 编号是:30的部门的员工数是:6 ALLEN WARD MARTIN BLAKE TURNER JAMES */ --查看当前用户的过程和函数 select object_name,created,status from user_objects where object_type in('PROCEDURE','FUNCTION'); --查看过程源代码 /* 创建过程后,ORACLE将过程名,源代码及执行代码放到数据字典中。 调用时,程序按照其执行代码直接执行,而不需要从新解析代码。 所以使用子程序性能要优于执行SQL语句。数据字典表 USER_SOURCE */ select text from user_source where name ='EMP_1'; --字符串要大写 --删除过程 --DROP PROCEDURE procedure_name; --procedure_name过程名字
reference
http://download.oracle.com/docs/cd/B13789_01/server.101/b10759/statements_5009.htm
http://psoug.org/reference/functions.html
发表评论
-
oracle 数据库隔离级别
2014-04-29 17:46 1135事务不同引发的状况: 脏读(Dirty reads ... -
oracle ORA-00257
2014-02-07 10:23 779ORA-00257表示oracle日志文件已满,需清理日志空间 ... -
oracle导入sql文件
2014-01-26 14:17 24021.oracle用户登录 或root下切换 :su - or ... -
oracle 处理死锁
2013-10-30 10:23 623需以dba角色登录 --查询死锁的sql select sq ... -
oracle 数据库自增主键
2011-12-06 11:27 0oracle 自增走序列 当插入数据时,对具体的表定义ddl ... -
oracle 统计当前用户每个表的数据
2011-11-07 15:03 0declare CURSOR cs IS se ... -
oracle sequence ( 序列)
2011-10-21 15:31 2529--序列 /* 定义语法 CREATE SEQUE ... -
oracle table sequence
2011-10-21 13:09 0-- create table tab_1 ( t_id i ... -
oracle pl/sql递归查询
2011-10-13 12:00 2532--测试用表 create table xt( xti ... -
oracle 内建函数(二)——正则
2011-08-23 23:27 0--正则 --regexp_replace - ... -
oracle 内建函数二)--分析函数
2011-08-23 16:14 0--4.分组函数,avg(),count(),ma ... -
oracle 内建函数(一)
2011-08-23 12:01 1492数字函数 --输入和输出都是数字 --abs(x) 取绝 ... -
oracle sql
2011-08-22 17:41 0--union all --*select语句中列数量 ... -
oracle 数据库事务
2011-08-16 14:43 2233数据库事务: 事务: ... -
oracle 用户角色权限管理
2011-08-15 14:15 0select * from default_pwd$; ... -
oracle 异常处理
2011-08-09 16:55 0--异常 --预定义异常 pl/sql提供的系统例外 -- ... -
oracle 内置函数
2011-08-09 15:23 0--sql 函数 /* 单行函数:输入一行,输出一行 ... -
oracle 动态sql
2011-08-08 15:32 0--动态sql /* PL/SQL只认用户权限,不认角色 ... -
oracle trigger (触发器)
2011-08-08 11:55 3845--触发器 trigger --1.DML触发器 DM ... -
oracle cursor (游标)
2011-08-10 12:22 2602--ref 游标 /* 显示游标 多行 ...
相关推荐
通过学习和实践这些Oracle存储过程和函数的实例,你可以更好地理解和掌握如何在实际项目中应用它们。Oracle 存储过程详解.doc文档可能包含了更多详细的步骤和示例,建议详细阅读,以深化对这一主题的理解。
综合这三个主题,Oracle数据库开发者可以通过学习和熟练运用存储过程、函数和PL/SQL,提升数据库应用程序的性能和可维护性。了解并掌握游标管理,可以帮助开发者更加高效地处理大数据量的情况。这些知识对于任何涉及...
oracle 的存储过程和函数的语法 如下
Oracle存储过程和函数是数据库管理中的重要组成部分,它们允许开发者创建复杂的业务逻辑和数据处理流程。在这个"Oracle存储过程函数生成DEMO"中,我们主要关注如何在Oracle数据库环境中设计、编写、测试以及调用存储...
以上就是Java调用Oracle存储过程或函数的主要知识点,实践中要根据具体情况进行适当的调整和优化。在处理过程中,参考Oracle的JDBC文档和官方示例,以及Java API文档,将有助于理解和解决问题。
在“JAVA与存储过程.txt”文件中,可能包含了具体的示例代码,解释了如何在Java中调用Oracle存储过程和函数,以及如何处理输入和输出参数。这些示例可能涉及到了`Connection`, `PreparedStatement`, `ResultSet`等...
### Oracle存储过程、函数和包的关键知识点 #### 1. 存储过程和函数的认识 - **定义**:存储过程和函数是特定类型的PL/SQL块,它们被存储在数据库中,作为命名的对象存在。 - **命名存储**:与普通的PL/SQL块不同,...
通过以上介绍,我们可以看到Oracle存储过程和函数的强大功能。它们不仅可以帮助我们简化数据库操作,还能提高程序的可维护性和性能。掌握这些基础知识对于任何Oracle数据库开发者都是非常重要的。
Oracle实验报告
Oracle 存储过程、函数和包 Oracle 存储过程和函数是 Oracle 数据库中的一种程序单元,它们可以执行...创建和删除存储过程、参数传递、存储过程的执行、应用、优点和缺点都是 Oracle 存储过程和函数的重要知识点。
### Oracle存储过程、函数与DBLink详解 #### 一、Oracle存储过程简介 在Oracle数据库中,存储过程是一种预编译好的SQL代码集合,它可以接受输入参数、返回单个值或多个值,并能够执行复杂的数据库操作。存储过程...
在《ORACLE存储过程,函数,包,游标》这个文本文件中,可能包含了关于如何定义、调用和管理这些对象的示例代码和实践指导。通过阅读和理解这个文件,开发者能够深入了解Oracle数据库的动态编程能力,提升其在数据库...
通过以上对Oracle存储过程、游标和函数的详细介绍,我们可以看到这些特性为Oracle数据库提供了一种强大而灵活的方式来处理数据。掌握这些技术对于开发高效的应用程序至关重要。在未来的学习和实践中,我们应该不断...
### Java中调用Oracle的存储过程和函数 在Java应用程序中调用Oracle数据库中的存储过程或函数是一项常见的任务。这不仅能够提高代码的执行效率,还可以有效地管理事务处理,确保数据的一致性和完整性。本文将详细...
讲解了oracle的编程存储过程、函数和包
以下是一个简单的示例,展示了如何调用一个不带参数的Oracle存储过程: ```java Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session....
存储过程、函数、触发器和包
在Oracle数据库中,**存储过程**是一组预编译的SQL语句和过程式PL/SQL代码块,存储在数据库服务器上,并作为一个单元执行。它能够接收输入参数、执行复杂的业务逻辑,并且可以返回多个输出值或影响数据库状态。 **...
Oracle 存储过程函数和程序包 Oracle 存储过程函数和程序包是 Oracle 数据库中的一种核心组件,用于实现复杂的业务逻辑和数据处理。以下是 Oracle 存储过程函数和程序包的知识点总结: 一、游标的概念和类型 游标...
Oracle存储过程、函数和程序包 Oracle存储过程、函数和程序包是数据库管理系统中的一种机制,允许开发者在数据库服务器上创建和执行自定义的代码,以提高数据库的性能和安全性。本文将对Oracle存储过程、函数和程序...