【发布时间】:2014-06-11 08:12:35
【问题描述】:
我使用的处理外部 XML 文件的第 3 方产品存在问题。由于无法正确解析 & 符号(它们没有被转义),它会导致数据库崩溃。
如果我要通过 SQLPlus 执行此操作,我会简单地使用 'SET DEFINE OFF' 或 'SET ESCAPE ON' 或两者都使用!
但是,这个过程会从包中调用一个函数。
部分包体如下:
CURSOR extractxml_c
IS
SELECT TRIM( extractvalue(column_value, '/TARLROW/HUSID')) husid,
TRIM( extractvalue(column_value, '/TARLROW/UKPRN')) ukprn,
TRIM( extractvalue(column_value, '/TARLROW/NUMHUS')) numhus,
TRIM( extractvalue(column_value, '/TARLROW/CAMPID')) campid,
TRIM( extractvalue(column_value, '/TARLROW/NAMECAT')) namecat,
TRIM( extractvalue(column_value, '/TARLROW/COURSEAIM')) courseaim,
TRIM( extractvalue(column_value, '/TARLROW/CTITLE')) ctitle,
TRIM( extractvalue(column_value, '/TARLROW/OWNSTU')) ownstu,
TRIM( extractvalue(column_value, '/TARLROW/STATUS') ) status,
TRIM( extractvalue(column_value, '/TARLROW/YEAR')) year,
TRIM( extractvalue(column_value, '/TARLROW/QUALENT2')) qualent2,
TRIM( extractvalue(column_value, '/TARLROW/COMDATE')) comdate,
TRIM( extractvalue(column_value, '/TARLROW/POSTCODE')) postcode,
TRIM( extractvalue(column_value, '/TARLROW/ETHNIC')) ethnic,
TRIM( extractvalue(column_value, '/TARLROW/DOMICILE')) domicile,
TRIM( extractvalue(column_value, '/TARLROW/YRLLINST') ) yrllinst,
TRIM( extractvalue(column_value, '/TARLROW/UCASAPPID')) ucasappid,
TRIM( extractvalue(column_value, '/TARLROW/OWNINST')) owninst,
TRIM( extractvalue(column_value, '/TARLROW/TTCID') ) ttcid,
TRIM( extractvalue(column_value, '/TARLROW/QUALENT3')) qualent3,
NULL pidm,
p_cohort chrt_code,
p_term_code term_code,
USER user_id,
SYSDATE activity_date,
'Banner: ESC_HST_CHRT_HINTAR_XML' data_origin,
NULL surrogate_id,
NULL version,
NULL vpdi_code,
gkkpsql.API_RetrieveRunSequence run_seq
FROM TABLE(XMLSequence( l_xmltype.extract('/TARLREPORT/TARLROWS/TARLROW'))) ;
我想使用上述代码中 CTITLE 部分的替换功能替换从 XML 文件中提取的 & 字符。
类似这样的:
SELECT REPLACE('&' , '|| chr(38) || ')
但是,我似乎无法使语法正确。在包编译时,我不断收到缺少右括号的错误。
我用过:
TRIM( extractvalue(column_value, (REPLACE('&' , '|| chr(38) || ') '/TARLROW/CTITLE')) ctitle,
和
REPLACE('&' , '|| chr(38) || ') TRIM( extractvalue(column_value, '/TARLROW/CTITLE')) ctitle,
两者都不起作用。
有什么想法可以替换从 TRIM(extractvalue) 字符串函数中提取的字符吗?
TIA
【问题讨论】:
标签: sql oracle replace plsql trim