我有如下的 XML 格式。
<ROWSET>
<ROW NUM="1">
<pid>1</pid>
<lon>25.3032016</lon>
<lat>54.7146368</lat>
<dt>20/10/2013 08:45:42 PM</dt>
</ROW>
<ROW NUM="2">
<pid>1</pid>
<lon>25.3032016</lon>
<lat>54.7146368</lat>
<dt>20/10/2013 08:45:47 PM</dt>
</ROW>
<ROW NUM="3">
<pid>1</pid>
<lon>25.3032016</lon>
<lat>54.7146368</lat>
<dt>20/10/2013 08:45:52 PM</dt>
</ROW>
<ROW NUM="4">
<pid>1</pid>
<lon>25.3032016</lon>
<lat>54.7146368</lat>
<dt>20/10/2013 08:45:57 PM</dt>
</ROW>
<ROW NUM="5">
<pid>1</pid>
<lon>2512.3032016</lon> --Error part (as the longitude fields only stores NUMBER (13,10))
<lat>54.7146368</lat>
<dt>20/10/2013 08:45:57 PM</dt>
</ROW>
</ROWSET>
到目前为止,我有以下过程将 XML 加载到表中,
PROCEDURE load_xml(i_xml CLOB)
AS
l_sqlerrm VARCHAR2(200);
BEGIN
INSERT INTO xml_stage (pid, longitude, latitude, date_time)
(SELECT EXTRACTVALUE(VALUE(row_list), '//pid') AS pid
,EXTRACTVALUE(VALUE(row_list), '//lon') AS lon
,EXTRACTVALUE(VALUE(row_list), '//lat') AS lat
,EXTRACTVALUE(VALUE(row_list), '//dt') AS dt
FROM TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(i_xml), '/ROWSET/ROW'))) row_list
);
COMMIT;
EXCEPTION WHEN OTHERS THEN
FOR rec IN
(SELECT EXTRACTVALUE(VALUE(row_list), '//pid') AS pid
,EXTRACTVALUE(VALUE(row_list), '//lon') AS lon
,EXTRACTVALUE(VALUE(row_list), '//lat') AS lat
,EXTRACTVALUE(VALUE(row_list), '//dt') AS dt
FROM TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(i_xml), '/ROWSET/ROW'))) row_list
)
LOOP
BEGIN
INSERT INTO xml_stage (pid, longitude, latitude, date_time)
VALUES (rec.pid, rec.lon, rec.lat, rec.dt);
EXCEPTION WHEN dup_val_on_index THEN
NULL;
WHEN others THEN
l_sqlerrm := substr(SQLERRM,1,200);
INSERT INTO errored_xml (error_id, date_time, error_desc, xmltext)
VALUES (load_stage_error_seq.nextval, SYSDATE, l_sqlerrm , i_xml);
COMMIT;
END;
END loop;
END load_xml;
我的问题是,如果出现任何异常,目前我正在将完整的 xml (i_xml) 记录到表 errored_xml 中。有什么方法可以记录引发错误的特定 XML 行属性吗?
我的表结构如下,
CREATE TABLE xml_stage(
pid NUMBER(10),
longitude NUMBER (13,10) ,
latitude NUMBER (13,10) ,
date_time VARCHAR2(30),
CONSTRAINT xml_stage_pk PRIMARY KEY (pid,date_time)
);
CREATE TABLE errored_xml(
error_id NUMBER(6),
date_time DATE,
error_desc VARCHAR2(200),
xmltext CLOB,
CONSTRAINT errored_xml_pk PRIMARY KEY (error_id)
);
提前致谢。
最佳答案
你可以像这样插入errored_xml
INSERT INTO errored_xml
(
error_id,
date_time,
error_desc,
XMLTEXT
)
VALUES
(
load_stage_error_seq.nextval,
SYSDATE,
l_sqlerrm ,
XMLELEMENT ("ROW", XMLELEMENT("pid", rec.pid) , XMLELEMENT("lon", rec.lon), XMLELEMENT("lat", rec.lat), XMLELEMENT("dt", rec.dt))
);
(您需要一个用于 varchar2 的更改表来存储此 xml)
关于xml - 处理 XML 时的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19534231/
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd
在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee
我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手
已经有一个问题回答了如何将“America/Los_Angeles”转换为“PacificTime(US&Canada)”。但是我想将“美国/太平洋”和其他过时的时区转换为RailsTimeZone。我无法在图书馆中找到任何可以帮助我完成此任务的东西。 最佳答案 来自RailsActiveSupport::TimeZonedocs:TheversionofTZInfobundledwithActiveSupportonlyincludesthedefinitionsnecessarytosupportthezonesdefinedb
我对图像处理完全陌生。我对JPEG内部是什么以及它是如何工作一无所知。我想知道,是否可以在某处找到执行以下简单操作的ruby代码:打开jpeg文件。遍历每个像素并将其颜色设置为fx绿色。将结果写入另一个文件。我对如何使用ruby-vips库实现这一点特别感兴趣https://github.com/ender672/ruby-vips我的目标-学习如何使用ruby-vips执行基本的图像处理操作(Gamma校正、亮度、色调……)任何指向比“helloworld”更复杂的工作示例的链接——比如ruby-vips的github页面上的链接,我们将不胜感激!如果有ruby-
我有一个super简单的脚本,它几乎包含了FayeWebSocketGitHub页面上用于处理关闭连接的内容:ws=Faye::WebSocket::Client.new(url,nil,:headers=>headers)ws.on:opendo|event|p[:open]#sendpingcommand#sendtestcommand#ws.send({command:'test'}.to_json)endws.on:messagedo|event|#hereistheentrypointfordatacomingfromtheserver.pJSON.parse(event.d
我们如何捕获或/和处理ruby中所有未处理的异常?例如,这样做的动机可能是将某种异常记录到不同的文件或发送电子邮件给系统管理。在Java中我们会做Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandlerex);在Node.js中process.on('uncaughtException',function(error){/*code*/});在PHP中register_shutdown_function('errorHandler');functionerrorHandler(){$error=error_