2011-04-06 235 views
4

enter code here我正在构建一组函数,它们根据参数和内部选择返回一个json字符串。Oracle PL/SQL - 删除特定字符的最后一个实例

我遇到的问题是当我通过pl/sql中的光标循环时,构建了json的结构,它在最后一个节点的末尾添加了一个额外的逗号。

它解析正常,但由于额外的逗号,json的html eval失败。是否可以在pl/sql中删除特定的字符(比如字符串中最后一个逗号)。我已经看过REPLACE,但是我找不到使用REPLACE和特定字符实例的文档。

循环的样子:

FOR appGroup IN appGroups 
LOOP 

tsResults := tsResults || ' "Group" : { '; 
tsResults := tsResults || ' "Id" : "' || appGroup.group_id || '", '; 
tsResults := tsResults || '"Name" : "' || appGroupd.display_name || '" '; 
tsResults := tsResults || ' }, '; 

END LOOP; 

这是最后一行是给我的悲伤在这最后的逗号。

有什么办法可以杀死最后一个没有抓住所有字符串前面的字符以及后面的所有字符并将它们放在一起?

任何有关如何解决这个问题的建议都将不胜感激。

更新

使用Cyber​​nate的回答,我能够做出一些改变,以得到它的工作...本来立即END LOOP以下;我有额外的代码添加更多的结果字符串:

tsResults := tsResults || '}] }'; 

哪个正确结束,我当时正在研究组阵列...

我把该行之前,下面的代码:

tiLastComma := INSTR(tsResults, ',', -1); 
tsResults := SUBSTR(tsResults, 1, tiLastComma - 1); 

json现在被正确终止,并且在与jquery一起使用时正确传递。

回答

5

您可以使用INSTR函数查找上次出现的位置,然后使用SUBSTRING。

SELECT SUBSTR(tsResults , 1, INSTR(tsResults , ',', -1)-1) 
    INTO tsResults 
    FROM dual; 

如果你不觉得正则表达式是矫枉过正,这然后在PL/SQL中使用此语句:

SELECT REGEXP_REPLACE(tsResults , '\s*,\s*$', '') 
    INTO tsResults 
    FROM dual; 
4

它更容易使用rtrim功能。

tsResults := rtrim(tsResults, ','); 

然后终止JSON,添加右花括号在同一语句:那么在循环之后

tsResults := rtrim(tsResults, ',') || '}'; 
0

托比,我也有类似的情况,但RTRIM它会删除记忆您在函数中规定的值的所有实例。

例如:

我想从列选择的端部修整“X”。(最后一个实例ONLY)

列值= 'SOMEVALUEXX'

现在RTRIM将返回: 'someValue中'

这可能是可能的,你是后= 'SOMEVALUEX'

Chandu的答案是正确。

总是检查您的业务流程。

+0

Aashish,这会更好地表达Tobi的答案评论。直到你有足够的[声誉评论](http://stackoverflow.com/help/privileges/comment),请尝试提供直接回答问题的答案。 – kjhughes 2013-11-26 03:15:07

相关问题