修正Oracle长列中的文本

时间:2014-06-06 14:18:04

标签: sql oracle10g

(是的,我知道,Long不赞成使用Clob。不幸的是,我们现在无法改变它。)

我有一个带有Long列的表,其中包含表示特定于域的语言的文本。该语言支持IF / THEN / ELSE结构和单行注释(由" - "表示)。

以下是一个例子:

IF PERSON_AGE>=21 THEN \r\n
    RETURN OK \r\n
ELSE \r\n
    RETURN NOT_OK ENDIF \r\n

通常,用户需要修改此文本。他们要做的一件事就是通过在那里粘贴评论标记来注释掉IF / THEN / ELSE块。

不幸的是,由于先前版本的客户端中存在错误,因此在LONG列保留的文本中引入了换行符。这反过来使得基于ANTLR的解析器失去了理智。

现在,文本将如下所示:

-- IF PERSON_AGE>=21 THEN \r\n
--    RETURN OK \r\n
-- ELSE \r\n
    RETURN NOT_OK ENDIF

这导致了我们所谓的"悬空的ENDIF"问题。解析器爆炸了,我们不希望重新生成语法和各种访问者,因为新的客户端已经纠正了错误。

客户坚持使用脚本来解决此问题,而不是纠正数据库本身的问题。 Oracle是否提供了一个简单的功能?我知道我可以做一个基于正则表达式的搜索,但是如何重写文本?

0 个答案:

没有答案