当存储过程参数中有游标时,调用方法如下
2009-09-15 10:33
323 查看
variable tempCur refcursor;//必须声明全局绑定变量
declear
month varchar2(10) := '2009-09';
begin
PKG_SUBSTATION_LINE.GET_SUBSTATION_VOLTAGE_TABLE(month,:tempCur);
end;
程序包如下:
CREATE OR REPLACE PACKAGE PKG_SUBSTATION_LINE
AS
type lineTable is ref cursor;
procedure GET_SUBSTATION_VOLTAGE_TABLE(vMonth in varchar2, cur_lineTable out lineTable);
END;
CREATE OR REPLACE PACKAGE BODY PKG_SUBSTATION_LINE
AS
procedure GET_SUBSTATION_VOLTAGE_TABLE(vMonth in varchar2, cur_lineTable out lineTable)
is
nCount number;
strTempTable varchar2(1000);
strInsertTable varchar2(500);
strDeleteTable varchar2(200);
strSeleteTable varchar2(200);
cursor station_cursor is SElECT X_XLMC, X_BDZ FROM XSFX WHERE X_XSLB = '分线线损';
cursorrecord_station station_cursor%rowtype;
nInMonth number := 0;
nOutMonth number := 0;
nLossValueMonth number := 0;
nLossRateMonth number := 0;
nInYear number := 0;
nOutYear number := 0;
nLossValueYear number := 0;
nLossRateYear number := 0;
begin
strTempTable := 'CREATE GLOBAL TEMPORARY TABLE GLOBAL_SUBSTATION_LINE(SUBSTATIONNAME VARCHAR2(40 BYTE), LINENAME VARCHAR2(40 BYTE), PROVIDEVALUE_MONTH NUMBER(15,2), USEVALUE_MONTH NUMBER(15,2), LOSSVALUE_MONTH NUMBER(15,2), LOSSRATE_MONTH NUMBER(10,2), PROVIDEVALUE_YEAR NUMBER(15,2), USEVALUE_YEAR NUMBER(15,2), LOSSVALUE_YEAR NUMBER(15,2), LOSSRATE_YEAR NUMBER(10,2)) ON COMMIT PRESERVE ROWS';
strInsertTable := 'INSERT INTO GLOBAL_SUBSTATION_LINE VALUES(:stationName, :lineName, :provideMonth, :useMonth, :lossMonth, :rateMonth, :provideYear, :useYear, :lossYear, :rateYear)';
strDeleteTable := 'DELETE FROM GLOBAL_SUBSTATION_LINE';
strSeleteTable := 'SELECT * FROM GLOBAL_SUBSTATION_LINE';
SELECT COUNT(*) INTO nCount FROM USER_TABLES WHERE TABLE_NAME = UPPER('GLOBAL_SUBSTATION_LINE');
if nCount <= 0 then
execute immediate strTempTable;
else
execute immediate strDeleteTable;
end if;
open station_cursor;
loop
fetch station_cursor into cursorrecord_station;
exit when station_cursor%notfound;
SELECT NVL(SUM(DLZ*HJFS), 0) into nInMonth FROM XSFXBG_MONTH WHERE RQ = vMonth AND XSLB = '分线线损' AND XLMC = cursorrecord_station.X_XLMC AND JCGX = '进';
SELECT NVL(SUM(DLZ*HJFS), 0) into nOutMonth FROM XSFXBG_MONTH WHERE RQ = vMonth AND XSLB = '分线线损' AND XLMC = cursorrecord_station.X_XLMC AND JCGX = '出';
nLossValueMonth := nInMonth - nOutMonth;
if nInMonth <> 0 then
nLossRateMonth := nLossValueMonth/nInMonth*100;
end if;
SELECT NVL(SUM(DLZ*HJFS), 0) into nInYear FROM XSFXBG_MONTH WHERE RQ >= substr(vMonth, 1, 4)||'-01' AND RQ <= vMonth AND XSLB = '分线线损' AND XLMC = cursorrecord_station.X_XLMC AND JCGX = '进';
SELECT NVL(SUM(DLZ*HJFS), 0) into nOutYear FROM XSFXBG_MONTH WHERE RQ >= substr(vMonth, 1, 4)||'-01' AND RQ <= vMonth AND XSLB = '分线线损' AND XLMC = cursorrecord_station.X_XLMC AND JCGX = '出';
nLossValueYear := nInYear - nOutYear;
if nInYear <> 0 then
nLossRateYear := nLossValueYear/nInYear*100;
end if;
execute immediate strInsertTable using cursorrecord_station.X_BDZ, cursorrecord_station.X_XLMC, nInMonth/1000, nOutMonth/1000, nLossValueMonth/1000, nLossRateMonth, nInYear/1000, nOutYear/1000, nLossValueYear/1000, nLossRateYear;
nInMonth := 0;
nOutMonth := 0;
nLossValueMonth := 0;
nLossRateMonth := 0;
nInYear := 0;
nOutYear := 0;
nLossValueYear := 0;
nLossRateYear := 0;
end loop;
close station_cursor;
open cur_lineTable for strSeleteTable;
commit;
end GET_SUBSTATION_VOLTAGE_TABLE;
END;
declear
month varchar2(10) := '2009-09';
begin
PKG_SUBSTATION_LINE.GET_SUBSTATION_VOLTAGE_TABLE(month,:tempCur);
end;
程序包如下:
CREATE OR REPLACE PACKAGE PKG_SUBSTATION_LINE
AS
type lineTable is ref cursor;
procedure GET_SUBSTATION_VOLTAGE_TABLE(vMonth in varchar2, cur_lineTable out lineTable);
END;
CREATE OR REPLACE PACKAGE BODY PKG_SUBSTATION_LINE
AS
procedure GET_SUBSTATION_VOLTAGE_TABLE(vMonth in varchar2, cur_lineTable out lineTable)
is
nCount number;
strTempTable varchar2(1000);
strInsertTable varchar2(500);
strDeleteTable varchar2(200);
strSeleteTable varchar2(200);
cursor station_cursor is SElECT X_XLMC, X_BDZ FROM XSFX WHERE X_XSLB = '分线线损';
cursorrecord_station station_cursor%rowtype;
nInMonth number := 0;
nOutMonth number := 0;
nLossValueMonth number := 0;
nLossRateMonth number := 0;
nInYear number := 0;
nOutYear number := 0;
nLossValueYear number := 0;
nLossRateYear number := 0;
begin
strTempTable := 'CREATE GLOBAL TEMPORARY TABLE GLOBAL_SUBSTATION_LINE(SUBSTATIONNAME VARCHAR2(40 BYTE), LINENAME VARCHAR2(40 BYTE), PROVIDEVALUE_MONTH NUMBER(15,2), USEVALUE_MONTH NUMBER(15,2), LOSSVALUE_MONTH NUMBER(15,2), LOSSRATE_MONTH NUMBER(10,2), PROVIDEVALUE_YEAR NUMBER(15,2), USEVALUE_YEAR NUMBER(15,2), LOSSVALUE_YEAR NUMBER(15,2), LOSSRATE_YEAR NUMBER(10,2)) ON COMMIT PRESERVE ROWS';
strInsertTable := 'INSERT INTO GLOBAL_SUBSTATION_LINE VALUES(:stationName, :lineName, :provideMonth, :useMonth, :lossMonth, :rateMonth, :provideYear, :useYear, :lossYear, :rateYear)';
strDeleteTable := 'DELETE FROM GLOBAL_SUBSTATION_LINE';
strSeleteTable := 'SELECT * FROM GLOBAL_SUBSTATION_LINE';
SELECT COUNT(*) INTO nCount FROM USER_TABLES WHERE TABLE_NAME = UPPER('GLOBAL_SUBSTATION_LINE');
if nCount <= 0 then
execute immediate strTempTable;
else
execute immediate strDeleteTable;
end if;
open station_cursor;
loop
fetch station_cursor into cursorrecord_station;
exit when station_cursor%notfound;
SELECT NVL(SUM(DLZ*HJFS), 0) into nInMonth FROM XSFXBG_MONTH WHERE RQ = vMonth AND XSLB = '分线线损' AND XLMC = cursorrecord_station.X_XLMC AND JCGX = '进';
SELECT NVL(SUM(DLZ*HJFS), 0) into nOutMonth FROM XSFXBG_MONTH WHERE RQ = vMonth AND XSLB = '分线线损' AND XLMC = cursorrecord_station.X_XLMC AND JCGX = '出';
nLossValueMonth := nInMonth - nOutMonth;
if nInMonth <> 0 then
nLossRateMonth := nLossValueMonth/nInMonth*100;
end if;
SELECT NVL(SUM(DLZ*HJFS), 0) into nInYear FROM XSFXBG_MONTH WHERE RQ >= substr(vMonth, 1, 4)||'-01' AND RQ <= vMonth AND XSLB = '分线线损' AND XLMC = cursorrecord_station.X_XLMC AND JCGX = '进';
SELECT NVL(SUM(DLZ*HJFS), 0) into nOutYear FROM XSFXBG_MONTH WHERE RQ >= substr(vMonth, 1, 4)||'-01' AND RQ <= vMonth AND XSLB = '分线线损' AND XLMC = cursorrecord_station.X_XLMC AND JCGX = '出';
nLossValueYear := nInYear - nOutYear;
if nInYear <> 0 then
nLossRateYear := nLossValueYear/nInYear*100;
end if;
execute immediate strInsertTable using cursorrecord_station.X_BDZ, cursorrecord_station.X_XLMC, nInMonth/1000, nOutMonth/1000, nLossValueMonth/1000, nLossRateMonth, nInYear/1000, nOutYear/1000, nLossValueYear/1000, nLossRateYear;
nInMonth := 0;
nOutMonth := 0;
nLossValueMonth := 0;
nLossRateMonth := 0;
nInYear := 0;
nOutYear := 0;
nLossValueYear := 0;
nLossRateYear := 0;
end loop;
close station_cursor;
open cur_lineTable for strSeleteTable;
commit;
end GET_SUBSTATION_VOLTAGE_TABLE;
END;
相关文章推荐
- j2ee调用Oracle带数组参数和游标的存储过程方法
- JAVA调用ORACLE带数组输入参数和返回游标结果集的存储过程
- C#调用Oracle带有out游标参数存储过程的问题
- MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等
- [轉]MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等
- MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等(转)
- MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等
- oracle :带有out参数的存储过程的调用方法
- MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等
- 存储过程的输出参数为游标,PL/SQL中如何调用 Java代码如何调用
- JAVA调用存储过程输出参数为游标
- c# 调用带有参数的存储过程方法--oracle【转载】
- 带游标的存储过程 ibatis 调用方法
- MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等
- 带参数的存储过程动态创建一个视图及调用方法[表不固定,作为参数]
- MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等
- ibatis调用oracle的函数,存储过程的方法_IN_和OUT_游标
- C#存储过程Output返回参数 方法调用类
- MySQL存储过程例子,包含事务,输出参数,嵌套调用,游标,循环等等
- Sql Server 中带参数的存储过程及在Reporting Services 中的调用方法