1:首先你需要创建一个包,并定义你返回的游标的类型、存储过程 create or replace package TEST_PKG is -- Public type declarations type cur_emp is REF CURSOR; procedure test_proc (v_empno in number, emps out cur_emp); end TEST_PKG; 2:然后你再创建包体 create or replace package body TEST_PKG is procedure test_proc (v_empno in number, emps out cur_emp)asbeginopen emps for select * from emp where empno=7369; end test_proc; end TEST_PKG ; 3,通过JAVA调用 cstmt = conn.prepareCall("{call TEST_PKG .test_proc (?)}"); cstmt.registerOutParameter(1, OracleTypes.CURSOR); cstmt.execute();//获得结果集
创新互联凭借专业的设计团队扎实的技术支持、优质高效的服务意识和丰厚的资源优势,提供专业的网站策划、成都网站建设、网站建设、网站优化、软件开发、网站改版等服务,在成都十多年的网站建设设计经验,为成都上千余家中小型企业策划设计了网站。
ibatis中返回oracle游标的写法:
sqlMap.xml配置:
?xml version="1.0" encoding="UTF-8" ?
!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" ""
sqlMap namespace="KOMUNIKA_REPORT"
resultMap id="BaseResultMap" class="javaapplication4.StockAreaAndWarehouse"
result column="PRODUCT_CODE" property="productCode" /
result column="PRODUCT_NAME" property="productName" /
result column="INCOMING" property="incoming" /
result column="UNIT_SOLD" property="unitSold" /
result column="TOTAL_STOCK" property="totalStock" /
/resultMap
parameterMap id="resultMap" class="java.util.Map"
parameter property="result" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/
/parameterMap
procedure id="selectStockAreaAndWarehouse"
parameterMap="resultMap"
resultMap="BaseResultMap"
{ call KOMUNIKA.LP_STOCK_AREA_WAREHOUSE(?) }
/procedure
/sqlMap
应用中的调用:
package javaapplication4;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import java.io.Reader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* @author ifnumailto:ifnubima@gmail.com
*/
public class Main {
public static void main(String[] args) throws Exception {
String resource;
Reader reader;
List list;
SqlMapClient sqlMap;
resource = "javaapplication4/ibatis.xml";
reader = Resources.getResourceAsReader (resource);
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
Map map = new HashMap();
// use queryForList because the procedure map defines a resultmap
// for the statement
list = sqlMap.queryForList("KOMUNIKA_REPORT.selectStockAreaAndWarehouse", map);
System.out.println(list);
}
}
Oracle中的游标分为显示游标和隐式游标。
显示游标:
显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理;显示游标的操作:打开游标、操作游标、关闭游标;
隐式游标:
隐式游标是在执行插入(insert)、删除(delete)、修改(update)和返回单条记录的查询(select)语句时由PL/SQL自动定义的。PL/SQL隐式地打开SQL游标,并在它内部处理SQL语句,然后关闭它。
Oracle中函数/过程返回结果集的几种方式
原文 Oracle中函数/过程返回结果集的几种方式
Oracle中函数/过程返回结果集的几种方式:
以函数return为例,存储过程只需改为out参数即可,在oracle 10g测试通过.
(1) 返回游标:
return的类型为:SYS_REFCURSOR
之后在IS里面定义变量:curr SYS_REFCURSOR;
最后在函数体中写:
open cur for
select ......;
return cur;
oracle中有很多经常用到的包,他们功能强大,能够完成很多复杂,和不可想象的任务,所以我想请大家帮忙整理出来,不管是高手还是新人只要有对某个包比较熟悉,或者对他的一种使用方法比较熟悉,请帮忙跟贴,对大家的管理工作应该都会有很大帮助的。我先抛砖引玉写一个,希望版主和同志们帮忙。
------------------------------------------------------------------------------------
DBMS_SQL
一:)带有参数及解释
1、OPEN_CURSOR:返回新游标的ID值
2、PARSE:解析要执行的语句
3、BIND_VARIABLE:将给定的数量与特定的变量相连接
4、DEFINE_COLOUMN:定义字段变量,其值对应于指定游标中某个位置元素的值
(仅用于SELECT语句)
5、EXECUTE:执行指定的游标
6、EXECUTE_AND_FETCH:执行指定的游标并取记录
7、FETCH_ROWS:从指定的游标中取出记录
8、COLUMN_VALUE:返回游标中指定位置的元素
9、IS_OPEN:当指定的游标状态为OPEN时返回真值
10、CLOSE_CURSOR:关闭指定的游标并释放内存
11、LAST_ERROR_POSITION:返回出错SQL语句的字节偏移量
12、LAST_ROW_ID:返回最后一条记录的ROWID
13、LAST_SQL_FUNCTION_CODE:返回语句的SQL FUNCTION CODE
二:使用实例:
CREATE OR REPLACE
procedure dml_sql (the_rq varchar2) as
The_c1 Integer;
The_result Integer; --dml_sql_result
M_jls number;
The_xh varchar2(2);
Begin
The_xh:=lpad(ltrim(the_rq),2,'0');
The_C1 :=Dbms_sql.open_cursor;
Dbms_sql.parse(the_C1,'select count(*) from user_indexes
where table_name =''ZDCHB'''||the_xh,dbms_sql.v7);
Dbms_sql.define_column(the_c1,1,M_jls);
The_result:=Dbms_sql.execute(The_c1);
If dbms_sql.fetch_rows(cursor1) ; 0 then
Dbms_sql.column_value(cursor1,1,M_jls);
End if;
Dbms_sql.close_cursor(The_C1);
End;
大家不一定按这个模式来,也不一定要写的这么复杂,知道多少就写多少,整理出来,以后如果能够想用什么包到chinaunix里都能查到,就好了,呵呵!
--------------------------------------------------------------------------------
txfy 回复于:2003-09-16 15:03:09
二:dbms
DBMS_JOB 包介绍
调度任务队列里的任务要使用DBMS_JOB包中的过程。使用任务队列不需要特别的数据库特权。任何可以使用这些过程的用户都可以使用任务队列。
1:参数
SUBMIT
-- 向任务队列提交一个任务
REMOVE
-- 从任务队列中删除指定的任务
CHANGE
-- 改变任务
WHAT
-- 改变指定任务的任务内容
NEXT_DATE
-- 改变指定任务的下一次执行时间
INTERVAL
--改变指定任务的执行时间间隔。
BROKEN
-- 禁止指定任务的执行
RUN
--强制执行指定的任务
----------------------------------------------------------------------------------------------------------------------
2:使用方法
1)向任务队列提交一个任务(submit)
DBMS_JOB.SUBMIT( job OUT BINARY_INTEGER,
what IN VARCHAR2,
next_date IN DATE DEFAULT SYSDATE,
interval IN VARCHAR2 DEFAULT 'null',
no_parse IN BOOLEAN DEFAULT FALSE)
其中interval指定方式为:
'SYSDATE + 7' 每7天一次
'SYSDATE + 1/48' 每半个小时一次
'NEXT_DAY(TRUNC(SYSDATE), ''MONDAY'') + 15/24' 每个礼拜一的下午3点执行
'NEXT_DAY(ADD_MONTHS(TRUNC(SYSDATE, ''Q''), 3), ''THURSDAY'')'每个季度的第一个星期四
2)删除任务队列中的任务(remove)
DBMS_JOB.REMOVE(job IN BINARY_INTEGER)
The following statement removes job number 14144 from the job queue:
DBMS_JOB.REMOVE(14144);
3)指定任务的任务内容(WHAT)
DBMS_JOB.WHAT( job IN BINARY_INTEGER,
what IN VARCHAR2)
4)指定下次执行时间,如果你暂时不想让它执行可以设成3004年,呵呵!(next_date)
DBMS_JOB.NEXT_DATE( job IN BINARY_INTEGER,
next_date IN DATE)
5)指定任务的执行时间间隔(NTERVAL)
DBMS_JOB.INTERVAL( job IN BINARY_INTEGER,
interval IN VARCHAR2)
-----------------------------------------------------------------------------------------------------------------------
3:查询状态
显示任务的状态和失败执行的次数。
SELECT job, next_date, next_sec, failures, broken
FROM user_jobs;
JOB NEXT_DATE NEXT_SEC FAILURES B
---------- --------- -------- ---------- -
9125 01-NOV-94 00:00:00 4 N
14144 24-OCT-94 16:35:35 0 N
41762 01-JAN-00 00:00:00 16 Y
显示当前运行的任务的信息。
SELECT sid, r.job, log_user, r.this_date, r.this_sec
FROM dba_jobs_running r, dba_jobs j
WHERE r.job = j.job;
SID JOB LOG_USER THIS_DATE THIS_SEC
---------- ---------- -------------------- --------- --------
12 14144 JFEE 24-OCT-94 17:21:24
25 8536 SCOTT 24-OCT-94 16:45:12
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款