大家好,我是一个新手,老板给我布置了问题,限我这周交上去,请教!!!!!!!!

superrechard 2003-10-17 09:48:10

问题:比如:从bs_cust_info表中获取姓名.地址.预存纪录
从rcs_his_rok表中获取用户缴费.欠滞纳金,应缴笔数,其中(欠滞纳金,应缴笔数)s是通过计算得到的,将结果返回客户端,并作判断是否有客户号,客户端根据返回结果应缴笔数差看有没有欠费,没有欠费者作为预存,应缴笔数大于0,接着在发出水表欠费情况交易申请,其中,在函数get_reqinfo里面做一个判断,判断如下:000:交易成功
001:缴费号码不存在
002:特殊用户不交费
003:记录已锁(如已转非实时方式处理)
004:已缴费
005:金额不符
006:交易不存在
007:交易重复
008:交易不合法
009: 其他
020:数据包格式错
021:数据库操作错
022:其他错误;
025:金额查询,且有后续数据包

CREATE OR REPLACE PACKAGE BODY "WATER"."JOTP_BANK"
as

PROCEDURE JOTP_BANK_MAIN

(
reqdata IN varchar2, /*请求数据串*/
ansdata out varchar2, /*应答数据串*/
datlen out PLS_INTEGER /*应答数据串长度*/
)AS

TYPE RH is record(
clnt_id char(4), /*ID of client*/
pwd char(5), /* client's password */
msgtype char(1), /* message type */
tran_no char(20), /* Transaction No */
bd_len char(4), /* length of bank data package */
req_code char(3),
operator char(10),
CUSTID char(10),
METERNO char(10),
month char(6),
METERNO_E char(10),
amount char(12),
REALPAY char(12),
);

req_head RH;
rcode varchar(3);
logtime DATE;
logid char(20); -- 交易流水,记录中间件交易 and 销账流水号
svrid char(4); -- 服务器代号,返回数据包头用
USER_ERR EXCEPTION;

--***************************************************************************************/
-- FUNCTION:GET_REQINFO
-- NOTE: 将请求信息串分解到各个信息域
-- INPUT: REQDATA
-- OUTPU: NONE
-- RETURN:NUMBER
--***************************************************************************************/

FUNCTION GET_REQINFO(reqdata IN varchar2) RETURN VARCHAR AS
rdlen NUMBER(5,0);

BEGIN
rdlen:=0;
svrid:=' ';
req_head.clnt_id:=SUBSTR(reqdata,1,4);
req_head.pwd:=SUBSTR(reqdata,5,5);
req_head.msgtype:=SUBSTR(reqdata,10,1);
req_head.tran_no:=SUBSTR(reqdata,11,20);
req_head.bd_len:=SUBSTR(reqdata,31,4);
req_head.operator:=SUBSTR(reqdata,35,10);
req_head.req_code:=SUBSTR(reqdata,45,3);

INFOMSG('-------CHECK DATA FORMAT----------');
INFOMSG('CLIENT ID: '||req_head.clnt_id);
INFOMSG('REQ.CODE: '||req_head.req_code);
INFOMSG('TRAN_NO: '||req_head.tran_no);
INFOMSG('data len: '||TO_CHAR(LENGTH(reqdata)));
INFOMSG('-----------------------------------');
IF GETSETID('STPP_LOG',1,20,logid)<>0 THEN
RETURN '021';
END IF;
/*
SELECT HEADLEN+BODYLEN,res2 into rdlen,svrid FROM STPPDEF WHERE CODE=req_head.req_code and RES1='R';
INFOMSG('STEP1 : REQ. CODE CORRECT!'||TO_CHAR(rdlen));

IF rdlen=0 then
RETURN '020';
END IF ;

if rdlen<>length(reqdata) then
RETURN '020';
END IF;
*/
rdlen := length(reqdata);

IF req_head.req_code = '510' THEN
req_head.CUSTID:=SUBSTR(reqdata,48,10);
END IF;

IF req_head.req_code = '520' THEN
req_head.CUSTID:=SUBSTR(reqdata,48,10);
req_head.METERNO:=SUBSTR(reqdata,58,10);
req_head.MONTH:=SUBSTR(reqdata,68,6);
END IF;
/*
INFOMSG('STEP2 : DATA LENGTH CORRECT!');
IF rdlen>=47 THEN
req_head.CUSTID:=SUBSTR(reqdata,48,10);
END IF;
INFOMSG('CUSTID'||req_head.CUSTID);

IF rdlen>=57 THEN
req_head.meterno:=SUBSTR(reqdata,58,10);
END IF;

IF rdlen>=63 THEN
req_head.month:=SUBSTR(reqdata,68,6);
END IF;

IF rdlen>=73 THEN
req_head.amount:=SUBSTR(reqdata,74,10);
END IF;

IF rdlen>=93 THEN
req_head.operator:=SUBSTR(reqdata,84,20);
END IF;
*/
INFOMSG('-------CHECK END ----------');
RETURN '000';

--------出错处理------------------
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN '020';
WHEN OTHERS THEN
RETURN '021';
END;
-----END OF GET_REQINFO

--***************************************************************************************/
-- FUNCTION:CHK_REQINFO
-- NOTE: 检查请求信息的正确性
-- INPUT: NONE
-- OUTPU: NONE
-- RETURN:NUMBER
--***************************************************************************************/

FUNCTION CHK_REQINFO RETURN VARCHAR2 AS
rdlen NUMBER(5,0);
BEGIN
//这里面怎么修改可得到需要的返回信息????/ /
RETURN '000';
END;

---END OF CHK_REQINFO
...全文
26 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

17,081

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧