1.项目上用到了访问第三方接口,接口返回的数据格式是xml,需要保存在公司3个oracle的数据库表中,这里的table_test1,table_test2,table_test3就是要插入的目标表,供业务中读取,就有了本编文章,三个表的建表语句参考附件这里不在贴出。
2.存储过程脚本中下面一段。里面table_test4和table_test5是公司内部业务数据表,建表脚本这里不列出,只是为了获取需插入目标表,却又不在第三方接口返回的XML中的字段。into 后面的参数,可以直接改成v_FPATID:=001 这种直接赋值。
/*根据身份证号码查询库中相关信息,这里是利用了公司已有的业务数据库,通过vs_type获取一些其他要插入表中的基本的信息。这部分的逻辑可以成是获取v_FPATID,v_FPATNO,v_FPATFILENO,v_FVISIT_ID,v_FVISIT_NO,v_XB,v_FFULL_AGE,v_FPAT_ADDRESS,v_FPAT_TELEPHONE,v_FDIAGNOSIS,v_FPATNAME,v_FPATCSRQ 参数*/
if vs_type = 'IP' then
begin
SELECT PAT_ID,ZYH,ZYH,JZH,JZH,XB,NL,LXDZ,LXDH,RYZD,XM,CSRQ into v_FPATID,v_FPATNO,v_FPATFILENO,v_FVISIT_ID,v_FVISIT_NO,
v_XB,v_FFULL_AGE,v_FPAT_ADDRESS,v_FPAT_TELEPHONE,v_FDIAGNOSIS,v_FPATNAME,v_FPATCSRQ
FROM (select row_number() over(partition by t.sfzh order by T.RYRQ desc) rowindex,t.*
from table_test4 T where t.sfzh=v_sfzh) WHERE rowindex=1;
exception
when no_data_found then
v_FPATID := '';
v_FPATNO := '';
v_FPATFILENO := '';
v_XB := '';
v_FFULL_AGE := '';
v_FPAT_ADDRESS := '';
v_FPAT_TELEPHONE := '';
v_FDIAGNOSIS := '';
v_FVISIT_ID := '';
v_FVISIT_NO := '';
v_FPATNAME := '';
v_FPATCSRQ := null;
end ;
end if;
if vs_type = 'OP' then
begin
SELECT a.PAT_ID,a.OPPAT_NO,a.OPPAT_NO,a.PAT_SEX_ID,b.FULLADDRESS,b.MOBILE,A.PAT_NAME,a.Pat_Bdate
into v_FPATID,v_FPATNO,v_FPATFILENO,v_XB,v_FPAT_ADDRESS,v_FPAT_TELEPHONE,v_FPATNAME,v_FPATCSRQ
FROM op.op_patient a,op.op_pat_address b where a.FAMILY_ADDR_ID=b.addressid(+) and a.PAT_IDNO=v_sfzh and rownum =1;
SELECT LSH,LSHNO,NL,NL_UNIT,NL || NL_UNIT,ZD into v_FVISIT_ID,v_FVISIT_NO,v_FPAT_AGE,v_FAGE_UNIT,v_FFULL_AGE,v_FDIAGNOSIS
FROM (select row_number() over(partition by t.BLH order by T.JZRQ desc) rowindex,t.*
from table_test5 T where t.PAT_ID=v_FPATID) WHERE rowindex=1;
exception
when no_data_found then
v_FPATID := '';
v_FPATNO := '';
v_FPATFILENO := '';
v_XB := '';
v_FFULL_AGE := '';
v_FPAT_ADDRESS := '';
v_FPAT_TELEPHONE := '';
v_FDIAGNOSIS := '';
v_FVISIT_ID := '';
v_FVISIT_NO := '';
v_FPAT_AGE := '';
v_FAGE_UNIT := '';
v_FPATNAME := '';
v_FPATCSRQ := null;
end ;
end if;
3.存储过程脚本中“--写日志记录”,建表脚本如下。为了记录XML数据插入情况用。
-- Create table_test_log
create table table_test_log
(
aguid VARCHAR2(32) default SYS_GUID() not null,
fpatno VARCHAR2(32),
sessno VARCHAR2(10),
interfacename VARCHAR2(200),
interfaceurl VARCHAR2(4000),
inputparm CLOB,
outparm CLOB,
aresult VARCHAR2(2),
ausedate DATE default sysdate not null
)
tablespace test
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 8K
minextents 1
maxextents unlimited
);
-- Add comments to the columns
comment on column HT.BL_INTERFACE_LOG.fpatno
is '编码';
comment on column HT.BL_INTERFACE_LOG.sessno
is '系统编号';
comment on column HT.BL_INTERFACE_LOG.interfacename
is '接口名称';
comment on column HT.BL_INTERFACE_LOG.interfaceurl
is '接口地址';
comment on column HT.BL_INTERFACE_LOG.inputparm
is '接口入参';
comment on column HT.BL_INTERFACE_LOG.outparm
is '接口出参';
comment on column HT.BL_INTERFACE_LOG.aresult
is '调用结果,0-成功';
comment on column test.BL_INTERFACE_LOG.ausedate
is '调用时间';
4.整个存储过程脚本在附件。
5.xml入参示例也在附件。