oracle 游标 返回结果集 例子
来源:互联网 发布:网络维保服务总结 编辑:程序博客网 时间:2024/04/28 13:57
实际例子:用到Packages
包头:
CREATE OR REPLACE PACKAGE PACK_LED_LEDGER AS-- 游标申明 -- 返回台账数据的游标 --TYPE CUR_LEDGER IS ref CURSOR;-- 储存过程申请 PROCEDURE SP_LED_LEDGER_FETCH( JLQJAZDD IN VARCHAR2 DEFAULT '' , --安装地点 位号 pltypename IN VARCHAR2 DEFAULT '' , -- 台账类型编码 pdtypename IN VARCHAR2 DEFAULT '', -- 台账使用单位编码 pttypename IN VARCHAR2 DEFAULT '', -- 台账管理类别编码 pzttypename IN VARCHAR2 DEFAULT '', -- 台账使用状态编码 ptoolname IN VARCHAR2 DEFAULT '',-- 计量器具名称 ptoolcode IN VARCHAR2 DEFAULT '', --计量器具编码 psccjname IN VARCHAR2 DEFAULT '', -- 生产厂家名称 /* pjdrq IN VARCHAR2 DEFAULT '',--检定日期*/ pispage IN VARCHAR2 DEFAULT '0', -- 是否分页,如果为1时分页,为0时不分页,默认不分页 ppageer IN NUMBER DEFAULT 1,-- 第几页, prp IN NUMBER DEFAULT 15, -- 一页显示的行数 presult OUT sys_refcursor, -- 输出的结果集 presultext OUT SYS_REFCURSOR -- 结果的一些扩展属性 );-- 生成扩展数据查询的sql FUNCTION Fn_LED_LEDGER_EXTSWL( pltypeid VARCHAR2 ) RETURN VARCHAR2;END PACK_LED_LEDGER;
body:
CREATE OR REPLACE PACKAGE BODY PACK_LED_LEDGER AS -- 查询台账的的储存过程的实现 PROCEDURE SP_LED_LEDGER_FETCH( JLQJAZDD IN VARCHAR2 DEFAULT '' , --安装地点 位号 pltypename IN VARCHAR2 DEFAULT '' , -- 台账类型名称 pdtypename IN VARCHAR2 DEFAULT '', -- 台账使用单位名称 pttypename IN VARCHAR2 DEFAULT '', -- 台账管理类别名称 pzttypename IN VARCHAR2 DEFAULT '', -- 台账使用状态名称 ptoolname IN VARCHAR2 DEFAULT '',-- 计量器具名称 ptoolcode IN VARCHAR2 DEFAULT '', --计量器具编码 psccjname IN VARCHAR2 DEFAULT '', -- 生产厂家名称 /* pjdrq IN VARCHAR2 DEFAULT '',--检定日期*/ pispage IN VARCHAR2 DEFAULT '0', -- 是否分页,如果为1时分页,为0时不分页,默认不分页 ppageer IN NUMBER DEFAULT 1,-- 第几页, prp IN NUMBER DEFAULT 15, -- 一页显示的行数 presult OUT sys_refcursor, -- 输出的结果集 presultext OUT SYS_REFCURSOR -- 结果的一些扩展属性 ) IS pagebegin NUMERIC(10); -- 一页的起始行 pageend NUMBER(10); -- 一页的结束行 pagerows NUMBER(10); -- 每页显示的行数 pltypeid VARCHAR2(50) DEFAULT ''; -- 台账类型编码,根据参数取得 pdtypeid VARCHAR2(50) DEFAULT ''; -- 使用部门编码 pttypeid VARCHAR2(50) DEFAULT ''; -- 台账管理类型编码 pzttypeid VARCHAR2(50) DEFAULT ''; -- 台账使用状态编码 pagesqlstr VARCHAR2(300) DEFAULT ''; -- 分布语句 tjsqlstr VARCHAR2(1000) DEFAULT ''; -- 查询条件生成语句 maintsql VARCHAR2(4000) DEFAULT ''; -- 查询主表的数据的sql语句 maintjoinsqlheader VARCHAR2(500) DEFAULT ''; -- 主数据的表头 exttsql VARCHAR2(4000) DEFAULT ''; -- 扩展表的查询sql语句 aexttsql VARCHAR2(120) DEFAULT ''; extfield VARCHAR2(120) DEFAULT ''; extttjsql VARCHAR2(1000) DEFAULT ''; -- 扩展表的查询条件 exttcursql VARCHAR2(1000) DEFAULT ''; --定义扩展表的游标 alldatasqlstr VARCHAR2(8000); alldatasqlstrext VARCHAR2(8000); /*temp2 VARCHAR2(50) DEFAULT '';*/ TYPE d_cur IS ref CURSOR; fields_cur d_cur; BEGIN pagerows := prp; -- 分页数据 pagebegin := (ppageer-1)*pagerows+1; pageend :=ppageer*pagerows; tjsqlstr := ''; IF pltypename IS NOT NULL AND length(pltypename)>0 THEN --SELECT typeid INTO pltypeid FROM led_ledger_type WHERE fullname = pltypename;--gh 屏蔽 pltypeid := pltypename; tjsqlstr := ' ll.ltyepid = '''||pltypeid||''' '; END IF; IF pdtypename IS NOT NULL AND length(pdtypename)>0 THEN --SELECT typeid INTO pdtypeid FROM led_department_type WHERE fullname = pdtypename; IF length(tjsqlstr)>0 THEN tjsqlstr := tjsqlstr || ' AND ll.dtypename LIKE ''%'||pdtypename||'%'' '; ELSE tjsqlstr := tjsqlstr || ' ll.dtypename LIKE ''%'||pdtypename||'%'' '; END IF; END IF; IF pttypename IS NOT NULL AND length(pttypename)>0 THEN --SELECT typeid INTO pttypeid FROM led_tool_type WHERE fullname = pttypename; IF length(tjsqlstr)>0 THEN tjsqlstr := tjsqlstr || ' AND ll.ttypename LIKE ''%'||pttypename||'%'' '; ELSE tjsqlstr := tjsqlstr || ' ll.ttypename LIKE ''%'||pttypename||'%'' '; END IF; END IF; IF pzttypename IS NOT NULL AND length(pzttypename) >0 THEN --SELECT typeid INTO pzttypeid FROM led_syzt_type WHERE fullname = pzttypename; IF length(tjsqlstr)>0 THEN tjsqlstr := tjsqlstr || ' AND ll.zttypename LIKE ''%'||pzttypename||'%'' '; ELSE tjsqlstr := tjsqlstr || ' ll.zttypename LIKE ''%'||pzttypename||'%'' '; END IF; END IF; IF ptoolname IS NOT NULL AND length(ptoolname)>0 THEN IF length(tjsqlstr)>0 THEN tjsqlstr := tjsqlstr || ' and ll.jlqjname LIKE ''%'||ptoolname||'%'' '; ELSE tjsqlstr := tjsqlstr || ' ll.jlqjname LIKE ''%'||ptoolname||'%'' '; END IF; END IF; IF ptoolcode IS NOT NULL AND length(ptoolcode)>0 THEN IF length(tjsqlstr)>0 THEN tjsqlstr := tjsqlstr || ' AND ll.jlqjcode LIKE ''%'||ptoolcode||'%'' '; ELSE tjsqlstr := tjsqlstr || ' ll.jlqjcode LIKE ''%'||ptoolcode||'%'' '; END IF; END IF; IF psccjname IS NOT NULL AND length(psccjname)>0 THEN IF length(tjsqlstr)>0 THEN tjsqlstr := tjsqlstr || ' AND ll.jlqjsccj LIKE ''%'||psccjname||'%'' '; ELSE tjsqlstr := tjsqlstr || ' ll.jlqjsccj LIKE ''%'||psccjname||'%'' '; END IF; END IF; IF JLQJAZDD IS NOT NULL AND length(JLQJAZDD)>0 THEN IF length(tjsqlstr)>0 THEN tjsqlstr := tjsqlstr || ' AND ll.JLQJAZDD LIKE ''%'||JLQJAZDD||'%'' '; ELSE tjsqlstr := tjsqlstr || ' ll.JLQJAZDD LIKE ''%'||JLQJAZDD||'%'' '; END IF; END IF; /* IF pjdrq IS NOT NULL AND length(pjdrq)>0 THEN temp2 := to_date(pjdrq,'YYYY/MM/DD'); IF length(tjsqlstr)>0 THEN tjsqlstr := tjsqlstr || ' where ll.test_date=temp2'; ELSE tjsqlstr := tjsqlstr || ' ll.test_date=temp2 '; END IF; END IF;*/ -- 结果扩展表的属性 IF length(tjsqlstr)>0 THEN alldatasqlstrext :='SELECT count(*) allcount FROM led_ledger ll WHERE '||tjsqlstr; ELSE alldatasqlstrext :='SELECT count(*) allcount FROM led_ledger ll'; END IF; -- 生成分页语句 IF pispage = '1' THEN pagesqlstr := 'true'; IF tjsqlstr IS NOT NULL AND length(tjsqlstr)>0 THEN --tjsqlstr := ' ROWID IN(SELECT rid FROM( SELECT ROWID rid,ROWNUM rn ,jlqjid FROM led_ledger ll where '||tjsqlstr||' ORDER BY jlqjid DESC)WHERE rn BETWEEN '|| pagebegin ||' AND ' || pageend || ')'; tjsqlstr := ' ROWID IN(SELECT rid FROM( SELECT ROWID rid,ROWNUM rn ,jlqjid FROM led_ledger ll where '||tjsqlstr||' ORDER BY jlqjid ASC)WHERE rn BETWEEN '|| pagebegin ||' AND ' || pageend || ')'; ELSE -- tjsqlstr := ' ROWID IN(SELECT rid FROM( SELECT ROWID rid,ROWNUM rn ,jlqjid FROM led_ledger ORDER BY jlqjid DESC)WHERE rn BETWEEN '|| pagebegin ||' AND ' || pageend || ')'; tjsqlstr := ' ROWID IN(SELECT rid FROM( SELECT ROWID rid,ROWNUM rn ,jlqjid FROM led_ledger ORDER BY jlqjid ASC)WHERE rn BETWEEN '|| pagebegin ||' AND ' || pageend || ')'; END IF; END IF; -- 添加测试 dbms_output.put_line(tjsqlstr); -- 生成其它条件 --tjsqlstr := ' ll.ltyepid LIKE '''||pltypeid||'%'' AND ll.dtypeid LIKE '''||pdtypeid||'%'' AND ll.ttypeid LIKE '''||pttypeid||'%'' AND ll.zttypeid LIKE '''||pzttypeid||'%'' '; --tjsqlstr := tjsqlstr || ' and ll.jlqjname LIKE '''||ptoolname||'%'' AND ll.jlqjcode LIKE '''||ptoolcode||'%'' AND ll.jlqjsccj LIKE '''||psccjname||'%'' '; IF pagesqlstr IS NOT NULL AND length(pagesqlstr)>0 THEN IF length(tjsqlstr)>0 THEN maintsql := 'SELECT * FROM led_ledger WHERE '||tjsqlstr; extttjsql := 'SELECT xxxxguidflagxxx FROM led_ledger WHERE '||tjsqlstr; ELSE maintsql := 'SELECT * FROM led_ledger '; extttjsql := 'SELECT xxxxguidflagxxx FROM led_ledger '; END IF; ELSE IF length(tjsqlstr)>0 THEN maintsql := 'SELECT * FROM led_ledger ll WHERE '||tjsqlstr; extttjsql := 'SELECT xxxxguidflagxxx FROM led_ledger ll WHERE '||tjsqlstr; ELSE maintsql := 'SELECT * FROM led_ledger ll'; extttjsql := 'SELECT xxxxguidflagxxx FROM led_ledger ll'; END IF; END IF; --排序 --maintsql := maintsql || ' order by li.JLQJID DESC '; -- 添加测试 --dbms_output.put_line(maintsql); -- 添加主主数据的查询连接 --maintjoinsqlheader := 'SELECT lldtt.*,lsyt.fullname AS zttypename FROM ( '; --maintjoinsqlheader := maintjoinsqlheader || ' SELECT lldt.*,ltt.fullname AS ttypename FROM( '; --maintjoinsqlheader := maintjoinsqlheader || ' SELECT llt.*,ldt.fullname AS dtypename FROM ( '; maintjoinsqlheader := maintjoinsqlheader || ' SELECT templl.*,llt.fullname AS ltypename FROM( '; maintsql := maintjoinsqlheader || maintsql; --排序 IF pispage = '1' THEN maintsql := maintsql || ' ) templl,led_ledger_type llt WHERE templl.ltyepid = llt.typeid order by templl.jlqjid desc '; ELSE maintsql := maintsql || ' order by ll.jlqjid desc ) templl,led_ledger_type llt WHERE templl.ltyepid = llt.typeid '; END IF; --maintsql := maintsql || ' ) templl,led_ledger_type llt WHERE templl.ltyepid = llt.typeid '; --maintsql := maintsql || ' ) llt,led_department_type ldt WHERE llt.dtypeid = ldt.typeid '; --maintsql := maintsql || ' ) lldt,led_tool_type ltt WHERE lldt.ltyepid = ltt.typeid '; --maintsql := maintsql || ' ) lldtt,led_syzt_type lsyt WHERE lldtt.zttypeid = lsyt.typeid '; -- 添加测试 --dbms_output.put_line(maintsql); --生成扩展数据的查询sql --exttcursql := 'SELECT extfieldname FROM led_ledger_extfield WHERE xxxxguidflagxxx in('||extttjsql||')'; IF pltypeid IS NOT NULL AND length(pltypeid)>0 THEN exttcursql := 'SELECT extfieldname FROM led_ledger_extfield WHERE isdefault = 0 AND extfieldenable = 1 and ltypeid = '||pltypeid; --dbms_output.put_line(exttcursql); ELSE exttcursql := 'SELECT extfieldname FROM led_ledger_extfield WHERE isdefault = 0 AND extfieldenable = 1'; END IF; --添加测试 --dbms_output.put_line(exttsql); exttsql :=PACK_LED_LEDGER.FN_LED_LEDGER_EXTSWL(pltypeid); exttsql := exttsql || ' and xxxxguidflagxxx in ( ' || extttjsql || ' )'; exttsql := exttsql || ' )GROUP BY xxxxguidflagxxx'; --dbms_output.put_line(exttsql); alldatasqlstr := 'SELECT * FROM (' || maintsql || ') maint,(' || exttsql || ')extt WHERE maint.xxxxguidflagxxx = extt.xxxxguidflagxxxex(+)'; alldatasqlstr := 'select * from (' || alldatasqlstr || ') ldata,';/* alldatasqlstr := alldatasqlstr || '( SELECT lc.* FROM led_check lc,(SELECT jlqjcode,max(check_date) AS lastcheckdate,max(checkid) as mcheckid FROM led_check GROUP BY jlqjcode)lcld WHERE lc.jlqjcode = lcld.jlqjcode AND lc.checkid = lcld.mcheckid)ledcdata WHERE ldata.jlqjcode = ledcdata.jlqjcode(+)';*/ alldatasqlstr := alldatasqlstr || '( SELECT lc.* FROM led_check lc,(SELECT LEDGERID,max(check_date) AS lastcheckdate,max(checkid) as mcheckid FROM led_check GROUP BY LEDGERID)lcld WHERE lc.LEDGERID = lcld.LEDGERID AND lc.checkid = lcld.mcheckid)ledcdata WHERE ldata.JLQJID = ledcdata.LEDGERID(+)'; --dbms_output.put_line(alldatasqlstr); OPEN presult FOR alldatasqlstr; OPEN presultext FOR alldatasqlstrext; END SP_LED_LEDGER_FETCH; -- 添加函数 FUNCTION Fn_LED_LEDGER_EXTSWL( pltypeid VARCHAR2 ) RETURN VARCHAR2 AS sqlstr VARCHAR2(4000); asqlstr VARCHAR2(200); fieldname VARCHAR2(100); CURSOR fields_cur IS SELECT extfieldname FROM led_ledger_extfield WHERE isdefault = 0 AND extfieldenable = 1 AND ltypeid LIKE pltypeid||'%'; BEGIN sqlstr := 'SELECT xxxxguidflagxxx as xxxxguidflagxxxex,'; OPEN fields_cur; LOOP FETCH fields_cur INTO fieldname; EXIT WHEN fields_cur%NOTFOUND; asqlstr := 'max(decode(extfieldname,''' || fieldname || ''',extvalue,null)) as ' || fieldname; sqlstr := sqlstr || asqlstr || ','; END LOOP; CLOSE fields_cur; sqlstr := substr(sqlstr,0,length(sqlstr)-1); sqlstr := sqlstr || ' FROM ( SELECT lld.xxxxguidflagxxx,lld.extvalue,llf.extfieldname FROM led_ledger_extdata lld,led_ledger_extfield llf WHERE lld.extfieldid = llf.extfieldid'; RETURN sqlstr; END;END PACK_LED_LEDGER;
0 0
- oracle 游标 返回结果集 例子
- Oracle利用游标返回结果集的的例子(C#)
- oracle 游标 返回查询结果集
- 利用游标返回结果集的的例子(Oracle 存储过程)
- 用游标返回结果集的的例子(Oracle 存储过程)
- 利用游标返回结果集的的例子(Oracle 存储过程)
- 利用游标返回结果集的的例子(Oracle 存储过程)
- 执行Oracle存储过程返回游标结果集
- java调用oracle过程返回结果集(包和游标)
- 通过游标读取oracle存储过程返回的结果集
- oracle SYS_REFCURSOR返回结果集及动态游标使用方法
- SSM-Mybatis调用Oracle存储过程返回结果集(游标)
- java oracle游标结果集
- PL/SQL 测试游标返回结果集
- JAVA调用ORACLE带数组输入参数和返回游标结果集的存储过程
- Mybatis下配置调用Oracle自定义函数返回的游标结果集
- oracle存储过程中使用Ref Cursor强类型游标返回结果集
- oracle函数返回结果集(动态查询Sql并定义游标)
- JSF2.0中的managed bean生命周期
- Android应用开发SharedPreferences存储数据的使用方法
- C/C++:sizeof('a')的值为什么不一样?
- 合并C#生成的多个DLL解决方案
- HBase 常用Shell命令
- oracle 游标 返回结果集 例子
- OpenCV实现对图片的切割
- Spring Restful 风格示例
- EXCEL数据根据XY坐标导入ArcGIS
- EXECL打开多个文件时不在任务栏上只显示一个文件窗口
- 最大公约数与最小公倍数
- startActivityForResult的用法
- cocostudio中帧事件重复两遍的问题
- 阳光动力能源互联网股份公司(SPI)简介