摘要:最近项目中用到了存储过程,触发器,Function,由于以前没怎么用过,所以查资料,请教同事,最后总算是把问题解决了,问题是这样的,数据库中有三张表一张是存放从远程服务器获取数据的MBINMSGS表,这个表里面有个Clob字段,里面存放的是xml式的字符串
摘要:最近项目中用到了存储过程,触发器,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, ABNS VARCHAR2(64 BYTE), ACFT VARCHAR2(64 BYTE), AIRLINE VARCHAR2(64 BYTE), ALAP VARCHAR2(64 BYTE), BETM VARCHAR2(64 BYTE), CHDT VARCHAR2(64 BYTE), EIBT VARCHAR2(64 BYTE), FATA VARCHAR2(64 BYTE), FETA VARCHAR2(64 BYTE), FFID VARCHAR2(64 BYTE), FSTA VARCHAR2(64 BYTE), LMDT VARCHAR2(64 BYTE), LMUR VARCHAR2(64 BYTE), PSTM VARCHAR2(64 BYTE), RENO VARCHAR2(64 BYTE), RWAY VARCHAR2(64 BYTE), SPOT VARCHAR2(64 BYTE), STND VARCHAR2(64 BYTE) )
CREATE TABLE MIP.TB_CMS_FLGTINFO_D ( ID NUMBER(10) NOT NULL, A_TOBT VARCHAR2(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_TOBT VARCHAR2(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 VARCHAR2 IS --创建xml解析器实例xmlparser.Parser xmlPar xmlparser.Parser := xmlparser.newParser; --定义DOM文档 xDoc xmldom.DOMDocument; --定义item子节点数目变量 lenItme INTEGER; --定义节点列表,存放item节点们 itemNodes xmldom.DOMNodeList; --定义节点,存放单个item节点 itemNode xmldom.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 THEN RETURN ''; 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 RENO VARCHAR2 (100); AIRLINE VARCHAR2 (100); FFID VARCHAR2 (100); FFID_A VARCHAR2 (100); FFID_D VARCHAR2 (100); ABNS VARCHAR2 (100); ACFT VARCHAR2 (100); CHDT VARCHAR2 (100); EIBT VARCHAR2 (100); FATA VARCHAR2 (100); FETA VARCHAR2 (100); --FFID VARCHAR2 (100); FSTA VARCHAR2 (100); LMDT VARCHAR2 (100); LMUR VARCHAR2 (100); PSTM VARCHAR2 (100); RWAY VARCHAR2 (100); SPOT VARCHAR2 (100); STND VARCHAR2 (100); A_TOBT VARCHAR2 (100); A_WEATHER VARCHAR2 (100); --ABNS VARCHAR2 (100); --ACFT VARCHAR2 (100); ASAT VARCHAR2 (100); BCTM VARCHAR2 (100); BOTM VARCHAR2 (100); BSTM VARCHAR2 (100); C_TOBT VARCHAR2 (100); COBT VARCHAR2 (100); CTOT VARCHAR2 (100); DINT VARCHAR2 (100); DLAB VARCHAR2 (100); DOUT VARCHAR2 (100); EDDI VARCHAR2 (100); EOBT VARCHAR2 (100); EPGT VARCHAR2 (100); EPOT VARCHAR2 (100); FATD VARCHAR2 (100); --FFID VARCHAR2 (100); FSTD VARCHAR2 (100); --LMDT VARCHAR2 (100); --LMUR VARCHAR2 (100); OFTM VARCHAR2 (100); --RENO VARCHAR2 (100); --RWAY VARCHAR2 (100); STDI VARCHAR2 (100); --STND VARCHAR2 (100); TSAT VARCHAR2 (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 THEN DBMS_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 ROW DECLARE -- LOCAL VARIABLES HERE BEGIN MIP_PARSE (:NEW.MBINMSGS_CLOB_MSG); END COPY_MIPDATA_TRIGGER; /
五:最后把所有的Function,存储过程,触发器都编译一下,就可以执行了,执行过程是:给表MBINMSGS中每插入一条数据,触发器就触发存储过程,存储过程再调用Function,最后把解析出来的xml字符串插入到对应的数据表中。

方法:1、利用“select*from user_indexes where table_name=表名”语句查询表中索引;2、利用“select*from all_indexes where table_name=表名”语句查询所有索引。

oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

SublimeText3 Linux new version
SublimeText3 Linux latest version

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

WebStorm Mac version
Useful JavaScript development tools

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft
