要从Oracle Procedure获得数据集合,通常采用Ref Cursor的方式,要获得此Cursor,有以下几种方式:1.动态Sql返回:这种情况下,Procedure的运算通常比较简单,比如根据参数组合sql或者多个Table的Join操作,但都可以通过一个sql语句完成查询。
- CREATE OR REPLACE PROCEDURE sp_getcurrentstockpallet (
- startdate DATE,
- enddate DATE,
- status CHAR,
- material_no VARCHAR2,
- pallet_id VARCHAR2,
- box_id VARCHAR2,
- plant VARCHAR2,
- stloc VARCHAR2,
- customer VARCHAR2,
- creator VARCHAR2,
- mat_doc VARCHAR2,
- box_count NUMBER,
- RESULT OUT sys_refcursor
- )
- IS
- v_sql VARCHAR2 (1000);
- BEGIN
- v_sql :=
- "select b.status,b.pallet_id,b.wm_pallet_id,count(b.box_id) box_count,sum(b.glass_qty) total_qty,b.unit,b.material_no,
- b.grade,a.plant,a.stloc,a.area,a.bin,b.customer,b.product_type,b.CREATE_TIME,b.remark
- from sd_current_pallet a,sd_current_box b
- where a.pallet_id=b.pallet_id ";
-
- IF material_no IS NOT NULL
- THEN
- v_sql := v_sql || " and b.material_no =" || """" || material_no || """";
-
- END IF;
-
- v_sql :=
- v_sql
- || "group by b.status,b.pallet_id,b.wm_pallet_id,b.unit,b.material_no,
- b.grade,a.plant,a.stloc,a.area,a.bin,b.customer,b.product_type,b.CREATE_TIME,b.remark";
-
- OPEN RESULT FOR v_sql ;
- EXCEPTION
- WHEN NO_DATA_FOUND
- THEN
- NULL;
- WHEN OTHERS
- THEN
- RAISE;
- END sp_getcurrentstockpallet;
2.如果Procedure逻辑运算比较复杂,没办法在一个Sql中完成。通常运算过程中需要临时存储中间运算数据等等。
这种情况下,可以采取的方式:
1)使用嵌套表动态产生数据集,并运用Table()函数返回数据集。此种方式需要在DB中创建Object,并要创建嵌套表,
本地作用域中定义的Type不能被识别。
创建Object.
- CREATE OR REPLACE TYPE stockPallet_type as object
- (
- status CHAR(1),
- material_no VARCHAR2(20),
- pallet_id VARCHAR2(30),
- box_id VARCHAR2(30),
- plant VARCHAR2(4),
- stloc VARCHAR2(4),
- customer VARCHAR2(10),
- creator VARCHAR2(10),
- mat_doc VARCHAR2(20),
- box_count NUMBER(10)
- )
创建嵌套表,类型为上面创建的Object stockPallet_type
- CREATE OR REPLACE TYPE .t_stockpallet_nest as TABLE OF stockpallet_type;
Oracle 插入汉字时字符编码问题Oracle 10G中创建多监听端口问题相关资讯 Oracle教程
- Oracle中纯数字的varchar2类型和 (07/29/2015 07:20:43)
- Oracle教程:Oracle中查看DBLink密 (07/29/2015 07:16:55)
- [Oracle] SQL*Loader 详细使用教程 (08/11/2013 21:30:36)
| - Oracle教程:Oracle中kill死锁进程 (07/29/2015 07:18:28)
- Oracle教程:ORA-25153 临时表空间 (07/29/2015 07:13:37)
- Oracle教程之管理安全和资源 (04/08/2013 11:39:32)
|
本文评论 查看全部评论 (0)