有个转账流水表TRAN_FLOW,字段:FLOW_NO,CLIENT_NO(客户号),PAY_ACCOUT,PAY_ACCOUNT_NAME(客户姓名),RECEIVE_ACCOUNT(接受账号),TRAN_DATE(日期),AMOUNT(金额),STATUS(状态)
STATUS为90时成功,91时为失败。A、输入:统计起始日期(必输),统计截止日期(笔数),客户号(可空),客户姓名(可空);
B、输出:客户号、转账成功总笔数、转账失败总笔数、转账成功总金额、转账失败总金额、转账总笔数、转账总金额
自己写了包头,下面不会写了,求高手帮助下。
PROCEDURE PROC_STATIS_TRANSFER
(
IN_BEGINDATE in VARCHAR2,
IN_ENDDATE in VARCHAR2,
IN_CLIENTNO IN VARCHAR2,
IN_CLIENTNAME IN VARCHAR2,
OUT_RETCODE OUT VARCHAR2,
OUT_RESULT OUT REF_CURSOR
);
STATUS为90时成功,91时为失败。A、输入:统计起始日期(必输),统计截止日期(笔数),客户号(可空),客户姓名(可空);
B、输出:客户号、转账成功总笔数、转账失败总笔数、转账成功总金额、转账失败总金额、转账总笔数、转账总金额
自己写了包头,下面不会写了,求高手帮助下。
PROCEDURE PROC_STATIS_TRANSFER
(
IN_BEGINDATE in VARCHAR2,
IN_ENDDATE in VARCHAR2,
IN_CLIENTNO IN VARCHAR2,
IN_CLIENTNAME IN VARCHAR2,
OUT_RETCODE OUT VARCHAR2,
OUT_RESULT OUT REF_CURSOR
);
解决方案 »
- 一个简单的sql语句
- 什么时dual,
- 请教一个在修改记录时出现的关于表空间的错误怎么解决?
- 怎么写工具检查.dat文件里面是不是有重复的数据
- pdm文件导入
- 奇怪了select * from all_tables能够看到这个表名,但是select * from 表名却说表不存在
- 如何在SQL * PLUS中启动远程服务器中的数据库
- about remote_login_passwordfile
- 我要在数据实力配置文件中加入utl_file_dir
- powerdesigner生成的sql文件导入oracle产生Warning: Trigger created with compilation errors
- 用in怎么就出现一行数据?
- 对分区表进行了 删除,添加,分割,合并 之后索引失效了
CREATE OR REPLACE PROCEDURE PROC_STATIS_TRANSFER
(
IN_BEGINDATE in VARCHAR2,
IN_ENDDATE in VARCHAR2,
IN_CLIENTNO IN VARCHAR2,
IN_CLIENTNAME IN VARCHAR2,
OUT_RETCODE OUT VARCHAR2,
OUT_RESULT OUT REF_CURSOR
)
IS
SUM_CNUMBER;--转账成功总笔数
SUN_SNUMBER;--转账失败总笔数
SUM_CAMOUT;--转账成功总金额
SUM_SAMOUT;--转账失败总金额
SUM_SUMNUMBER;--转账总笔数
SUM_SUNAMOUT;--转账总金额
BEGIN
SELECT SUM(*),SUM(AMOUNT) INTO SUM_CNUMBER,SUM_CAMOUT FROM TRAN_FLOW WHERE STATUS=90 (AND TRAN_DATE BETWEEN TO_DATE(IN_BEGINDATE, 'yyyy/MM/dd HH24:mi:ss') AND
TO_DATE(IN_ENDDATE, 'yyyy/MM/dd HH24:mi:ss') AND CLIENT_NO=IN_CLIENTNO);--后面为条件SELECT SUM(*),SUM(AMOUNT) INTO SUM_SNUMBER,SUM_SAMOUT FROM TRAN_FLOW WHERE STATUS=91 (AND TRAN_DATE BETWEEN TO_DATE(IN_BEGINDATE, 'yyyy/MM/dd HH24:mi:ss') AND
TO_DATE(IN_ENDDATE, 'yyyy/MM/dd HH24:mi:ss') AND CLIENT_NO=IN_CLIENTNO);SELECT SUM(*),SUM(AMOUNT) INTO SUM_SUMNUMBER,SUM_SUNAMOUT FROM TRAN_FLOW;
OUT_RETCODE:= ;--填写你想输出的参数就行 OUT_RESULTOUT_RESULT:= ;--填写你想输出的参数就行
END;
TO_DATE(IN_ENDDATE, 'yyyy/MM/dd HH24:mi:ss') AND CLIENT_NO=IN_CLIENTNO;
后面的条件根据楼主自己的需要添加,上面的条件是时间在输入的开始时间和结束时间内的,还有根据客户号和客户姓名查询等。
(
IN_BEGINDATE in VARCHAR2,
IN_ENDDATE in VARCHAR2,
IN_CLIENTNO IN VARCHAR2,
IN_CLIENTNAME IN VARCHAR2,
OUT_RETCODE OUT VARCHAR2,
OUT_RESULT OUT SYS_REFCURSOR
)
as
sql_txt varchar2(1000);
begin
sql_txt := 'select min(CLIENT_NO),
sum(case STATUS when 90 then 1 else null end), --转账成功总笔数
sum(case STATUS when 91 then 1 else null end), --转账失败总笔数
sum(case STATUS when 90 then AMOUNT else null end), --转账成功总金额
sum(case STATUS when 91 then AMOUNT else null end), --转账失败总金额
count(*),
sum(AMOUNT)
from TRAN_FLOW where CLIENT_NO=' || IN_CLIENTNO
|| ' and TRAN_DATE>to_date(''' || IN_BEGINDATE
|| ''') and TRAN_DATE<to_date(''' || IN_ENDDATE || ''')';
dbms_output.put_line(sql_txt);
open OUT_RESULT for sql_txt;
OUT_RETCODE := '0';
EXCEPTION
when others then
OUT_RETCODE := '1';
end;调用的例子
declare
l_clientno VARCHAR2(100);
l_successcnt VARCHAR2(100);
l_failurecnt VARCHAR2(100);
l_successamount VARCHAR2(100);
l_failureamount VARCHAR2(100);
l_cnt VARCHAR2(100);
l_amount VARCHAR2(100);
OUT_RETCODE VARCHAR2(100);
OUT_RESULT SYS_REFCURSOR;
begin
PROC_STATIS_TRANSFER(sysdate-10, sysdate, '1', null, out_retcode, out_result);
loop
fetch out_result into l_clientno, l_successcnt, l_failurecnt,
l_successamount, l_failureamount, l_cnt, l_amount;
exit when out_result%notfound;
dbms_output.put_line(l_clientno || ' ' || l_successcnt || ' ' || l_amount);
end loop;
end;