第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > Oracle中通过:触发器 存储过程 Function调用实现解析Clob字段

Oracle中通过:触发器 存储过程 Function调用实现解析Clob字段

时间:2021-06-29 03:58:26

相关推荐

Oracle中通过:触发器 存储过程 Function调用实现解析Clob字段

数据库|mysql教程

Oracle,触发器,存储,过程,Function,调

数据库-mysql教程

中华养生网源码 伪静态,vscode c语言 高亮,ubuntu长期维护,zuul配置tomcat,sqlite 删除换行符,网络爬虫的设计与实现java,php 常用 正则,seo公司推荐竞价,网站的程序分类,杰奇小说系统如何设置网页标题,织梦模板主页修改lzw

摘要:最近项目中用到了存储过程,触发器,Function,由于以前没怎么用过,所以查资料,请教同事,最后总算是把问题解决了,问题是这样的,数据库中有三张表一张是存放从远程服务器获取数据的MBINMSGS表,这个表里面有个Clob字段,里面存放的是xml式的字符串

socket获取网页源码,.vscode文件,ubuntu动画效果,tomcat gcf,sqlite和fmdb,网站建设 服务器 预算报价清单,jquery 插件 弹出框,web最新前端框架,金刚 骷髅爬虫,php爆库,国内seo培训,易语言web网站,花瓣网页特效代码,dz模板仿百度贴吧手机,页面跳转 html,电商后台商品管理系统,免费网站程序lzw

一个采集短视频的网站源码,vscode打印结果展开,开机安装ubuntu,tomcat注册激活,解密sqlite 数据库,下水道里的爬虫图片,ip数据库 php,宁波seo专员排名,网站二级目录解析,应用介绍网页源码,手机cpa模板lzw

摘要:最近项目中用到了存储过程,触发器,Function,由于以前没怎么用过,所以查资料,请教同事,最后总算是把问题解决了,问题是这样的,数据库中有三张表一张是存放从远程服务器获取数据的MBINMSGS表,这个表里面有个Clob字段,里面存放的是xml格式的字符串,我们要把这个表里面的xml字符串通过Oracle解析出来,然后再把解析出来的数据插入对应的数据表:TB_CMS_FLGTINFO_A表和TB_CMS_FLGTINFO_D表,以上就是问题的描述,下面我把我的代码贴出了,以供大家参考:

一:数据表结构SQL

CREATE TABLE MIP.MBINMSGS( ID NUMBER(30)NOT NULL, MBINMSGS_CLOB_MSG CLOB, MBINMSGS_DATE_RECEIVED DATE, MBINMSGS_DATE_PROCESSED DATE, MBINMSGS_SUBSYSTEM_NAME VARCHAR2(100 BYTE), MBINMSGS_SUBSYSTEM_DATE_SENT DATE, SERVICENAME VARCHAR2(30 BYTE) NOT NULL)

CREATE TABLE MIP.TB_CMS_FLGTINFO_A( ID NUMBER(10) NOT NULL, ABNSVARCHAR2(64 BYTE), ACFTVARCHAR2(64 BYTE), AIRLINE VARCHAR2(64 BYTE), ALAPVARCHAR2(64 BYTE), BETMVARCHAR2(64 BYTE), CHDTVARCHAR2(64 BYTE), EIBTVARCHAR2(64 BYTE), FATAVARCHAR2(64 BYTE), FETAVARCHAR2(64 BYTE), FFIDVARCHAR2(64 BYTE), FSTAVARCHAR2(64 BYTE), LMDTVARCHAR2(64 BYTE), LMURVARCHAR2(64 BYTE), PSTMVARCHAR2(64 BYTE), RENOVARCHAR2(64 BYTE), RWAYVARCHAR2(64 BYTE), SPOTVARCHAR2(64 BYTE), STNDVARCHAR2(64 BYTE))

CREATE TABLE MIP.TB_CMS_FLGTINFO_D( ID NUMBER(10) NOT NULL, A_TOBTVARCHAR2(64 BYTE), A_WEATHER VARCHAR2(64 BYTE), ABNS VARCHAR2(64 BYTE), ACFT VARCHAR2(64 BYTE), AIRLINE VARCHAR2(64 BYTE), ASAT VARCHAR2(64 BYTE), BCTM VARCHAR2(64 BYTE), BOTM VARCHAR2(64 BYTE), BSTM VARCHAR2(64 BYTE), C_TOBTVARCHAR2(64 BYTE), COBT VARCHAR2(64 BYTE), CTOT VARCHAR2(64 BYTE), DINT VARCHAR2(64 BYTE), DLAB VARCHAR2(64 BYTE), DNAP VARCHAR2(64 BYTE), DOUT VARCHAR2(64 BYTE), EDDI VARCHAR2(64 BYTE), EOBT VARCHAR2(64 BYTE), EPGT VARCHAR2(64 BYTE), EPOT VARCHAR2(64 BYTE), FATD VARCHAR2(64 BYTE), FFID VARCHAR2(64 BYTE), FSTD VARCHAR2(64 BYTE), LMDT VARCHAR2(64 BYTE), LMUR VARCHAR2(64 BYTE), OFTM VARCHAR2(64 BYTE), RENO VARCHAR2(64 BYTE), RWAY VARCHAR2(64 BYTE), STDI VARCHAR2(64 BYTE), STND VARCHAR2(64 BYTE), TSAT VARCHAR2(64 BYTE))

二:Function.SQL

CREATE OR REPLACE FUNCTION MIP.GetXmlNodeValue (xmlStr CLOB, nodeName VARCHAR2) RETURN VARCHAR2IS --创建xml解析器实例xmlparser.Parser xmlPar xmlparser.Parser := xmlparser.newParser; --定义DOM文档 xDocxmldom.DOMDocument; --定义item子节点数目变量 lenItme INTEGER; --定义节点列表,存放item节点们 itemNodesxmldom.DOMNodeList; --定义节点,存放单个item节点 itemNodexmldom.DOMNode; ValueReturn VARCHAR2 (100);BEGIN --解析xmlStr中xml字符串,并存放到xmlPar中 xmlparser.parseClob (xmlPar, xmlStr); --将xmlPar中的数据转存到dom文档中 xDoc := xmlparser.getDocument (xmlPar); xmlparser.freeParser (xmlPar); --释放解析器实例 --获取所有item节点 itemNodes := xmldom.getElementsByTagName (xDoc, nodeName); --获取item节点的个数 lenItme := xmldom.getLength (itemNodes); IF lenItme = 0 THENRETURN \; END IF; --获取节点列表中的第1个item节点 itemNode := xmldom.item (itemNodes, 0); --获取所有子节点的值 ValueReturn := xmldom.getNodeValue (xmldom.getFirstChild (itemNode)); RETURN ValueReturn;END GetXmlNodeValue;/

三:存储过程.SQL

CREATE OR REPLACE PROCEDURE MIP.MIP_PARSE (xmlStr IN CLOB)IS RENOVARCHAR2 (100); AIRLINE VARCHAR2 (100); FFIDVARCHAR2 (100); FFID_A VARCHAR2 (100); FFID_D VARCHAR2 (100); ABNSVARCHAR2 (100); ACFTVARCHAR2 (100); CHDTVARCHAR2 (100); EIBTVARCHAR2 (100); FATAVARCHAR2 (100); FETAVARCHAR2 (100); --FFIDVARCHAR2 (100); FSTAVARCHAR2 (100); LMDTVARCHAR2 (100); LMURVARCHAR2 (100); PSTMVARCHAR2 (100); RWAYVARCHAR2 (100); SPOTVARCHAR2 (100); STNDVARCHAR2 (100); A_TOBT VARCHAR2 (100); A_WEATHERVARCHAR2 (100); --ABNSVARCHAR2 (100); --ACFTVARCHAR2 (100); ASATVARCHAR2 (100); BCTMVARCHAR2 (100); BOTMVARCHAR2 (100); BSTMVARCHAR2 (100); C_TOBT VARCHAR2 (100); COBTVARCHAR2 (100); CTOTVARCHAR2 (100); DINTVARCHAR2 (100); DLABVARCHAR2 (100); DOUTVARCHAR2 (100); EDDIVARCHAR2 (100); EOBTVARCHAR2 (100); EPGTVARCHAR2 (100); EPOTVARCHAR2 (100); FATDVARCHAR2 (100); --FFIDVARCHAR2 (100); FSTDVARCHAR2 (100); --LMDTVARCHAR2 (100); --LMURVARCHAR2 (100); OFTMVARCHAR2 (100); --RENOVARCHAR2 (100); --RWAYVARCHAR2 (100); STDIVARCHAR2 (100); --STNDVARCHAR2 (100); TSATVARCHAR2 (100);BEGIN RENO := GetXmlNodeValue (xmlStr, RENO); AIRLINE := GetXmlNodeValue (xmlStr, AIRLINE); FFID := GetXmlNodeValue (xmlStr, FFID); ABNS := GetXmlNodeValue (xmlStr, ABNS); ACFT := GetXmlNodeValue (xmlStr, ACFT); CHDT := GetXmlNodeValue (xmlStr, CHDT); EIBT := GetXmlNodeValue (xmlStr, EIBT); FATA := GetXmlNodeValue (xmlStr, FATA); FETA := GetXmlNodeValue (xmlStr, FETA); FFID := GetXmlNodeValue (xmlStr, FFID); FSTA := GetXmlNodeValue (xmlStr, FSTA); LMDT := GetXmlNodeValue (xmlStr, LMDT); LMUR := GetXmlNodeValue (xmlStr, LMUR); PSTM := GetXmlNodeValue (xmlStr, PSTM); RWAY := GetXmlNodeValue (xmlStr, RWAY); SPOT := GetXmlNodeValue (xmlStr, SPOT); STND := GetXmlNodeValue (xmlStr, STND); A_TOBT := GetXmlNodeValue (xmlStr, A_TOBT); A_WEATHER := GetXmlNodeValue (xmlStr, A_WEATHER); --ABNS := GetXmlNodeValue (xmlStr, ABNS); --ACFT := GetXmlNodeValue (xmlStr, ACFT); ASAT := GetXmlNodeValue (xmlStr, ASAT); BCTM := GetXmlNodeValue (xmlStr, BCTM); BOTM := GetXmlNodeValue (xmlStr, BOTM); BSTM := GetXmlNodeValue (xmlStr, BSTM); C_TOBT := GetXmlNodeValue (xmlStr, C_TOBT); COBT := GetXmlNodeValue (xmlStr, COBT); CTOT := GetXmlNodeValue (xmlStr, CTOT); DINT := GetXmlNodeValue (xmlStr, DINT); DLAB := GetXmlNodeValue (xmlStr, DLAB); DOUT := GetXmlNodeValue (xmlStr, DOUT); EDDI := GetXmlNodeValue (xmlStr, EDDI); EOBT := GetXmlNodeValue (xmlStr, EOBT); EPGT := GetXmlNodeValue (xmlStr, EPGT); EPOT := GetXmlNodeValue (xmlStr, EPOT); FATD := GetXmlNodeValue (xmlStr, FATD); FSTD := GetXmlNodeValue (xmlStr, FSTD); --LMDT := GetXmlNodeValue (xmlStr, LMDT); --LMUR := GetXmlNodeValue (xmlStr, LMUR); OFTM := GetXmlNodeValue (xmlStr, OFTM); STDI := GetXmlNodeValue (xmlStr, STDI); TSAT := GetXmlNodeValue (xmlStr, TSAT);IF INSTR(FFID,-D-) > 0 THEN FFID_D := FFID; INSERT INTO TB_CMS_FLGTINFO_D (ID,A_TOBT,A_WEATHER,ABNS,ACFT,AIRLINE,ASAT,BCTM,BOTM,BSTM,C_TOBT,COBT,CTOT,DINT,DLAB,DOUT,EDDI,EOBT,EPGT,EPOT,FATD,FFID,FSTD,LMDT,LMUR,OFTM,RENO,RWAY,STDI,STND,TSAT)VALUES (FLGTINFO_D_SEQ.NEXTVAL,A_TOBT,A_WEATHER,ABNS,ACFT,AIRLINE,ASAT,BCTM,BOTM,BSTM,C_TOBT,COBT,CTOT,DINT,DLAB,DOUT,EDDI,EOBT,EPGT,EPOT,FATD,FFID_D,FSTD,LMDT,LMUR,OFTM,RENO,RWAY,STDI,STND,TSAT);ELSE FFID_A := FFID; INSERT INTO TB_CMS_FLGTINFO_A (ID,ABNS,ACFT,AIRLINE,CHDT,FFID,RENO,EIBT,FATA,FETA,FSTA,LMDT,LMUR,PSTM,RWAY,SPOT,STND)VALUES (FLGTINFO_A_SEQ.NEXTVAL,ABNS,ACFT,AIRLINE,CHDT,FFID_A,RENO,EIBT,FATA,FETA,FSTA,LMDT,LMUR,PSTM,RWAY,SPOT,STND);END IF; COMMIT;EXCEPTION WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE (SQLERRM);END MIP_PARSE;/

四:触发器.SQL

DROP TRIGGER MIP.COPY_MIPDATA_TRIGGER;CREATE OR REPLACE TRIGGER MIP.COPY_MIPDATA_TRIGGER AFTER INSERT ON MIP.MBINMSGS FOR EACH ROWDECLARE-- LOCAL VARIABLES HEREBEGIN MIP_PARSE (:NEW.MBINMSGS_CLOB_MSG);END COPY_MIPDATA_TRIGGER;/

五:最后把所有的Function,存储过程,触发器都编译一下,就可以执行了,执行过程是:给表MBINMSGS中每插入一条数据,触发器就触发存储过程,存储过程再调用Function,最后把解析出来的xml字符串插入到对应的数据表中。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。