Oracle PL/SQL - 删除特定字符的最后一个实例

Pat*_*ick 4 string json plsql

enter code here我正在构建一组函数,它们根据参数和内部选择返回一个json字符串.

我遇到的问题是因为我在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;
Run Code Online (Sandbox Code Playgroud)

这是最后一行的最后一个逗号给了我悲伤.

有没有办法杀死最后一个没有抓取它之前的所有字符串字符,以及它之后的所有字符并将它们组合在一起?

关于如何解决这个问题的任何建议都将非常感激.

更新

使用Cyber​​nate的答案我能够进行一些更改以使其工作......最初是在END LOOP之后立即进行的; 我有额外的代码添加更多的结果字符串:

tsResults := tsResults ||  '}] }';
Run Code Online (Sandbox Code Playgroud)

哪个正确终止了我正在处理的组数组...

我在该行之前放置了以下代码:

tiLastComma := INSTR(tsResults, ',', -1);
tsResults := SUBSTR(tsResults, 1, tiLastComma - 1);
Run Code Online (Sandbox Code Playgroud)

现在json正确终止,并且在与jquery一起使用时可以正常进行.

小智 7

它更容易使用该rtrim功能。所以在循环之后:

tsResults := rtrim( tsResults, ',' );
Run Code Online (Sandbox Code Playgroud)

然后要终止 JSON,请在同一语句中添加右大括号:

tsResults := rtrim( tsResults, ',' ) || '}';
Run Code Online (Sandbox Code Playgroud)


Cha*_*ndu 6

您可以使用INSTR函数查找","的最后一次出现的位置,然后使用SUBSTRING.

 SELECT SUBSTR(tsResults , 1, INSTR(tsResults , ',', -1)-1)
    INTO tsResults 
    FROM dual;
Run Code Online (Sandbox Code Playgroud)

如果您认为正则表达式不适用于此,请在PL/SQL中使用此语句:

 SELECT REGEXP_REPLACE(tsResults , '\s*,\s*$', '') 
    INTO tsResults 
    FROM dual;
Run Code Online (Sandbox Code Playgroud)