2011-04-06 69 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

相關問題