私はPL/SQLにまったく慣れていないので、文字列内の個別の文字の名前と数を取得する必要があります。たとえば、 string がある場合、str="helloexample"
の個別の文字の出力を取得する必要があります。str
heloxamp
これどうやってするの?
私はPL/SQLにまったく慣れていないので、文字列内の個別の文字の名前と数を取得する必要があります。たとえば、 string がある場合、str="helloexample"
の個別の文字の出力を取得する必要があります。str
heloxamp
これどうやってするの?
次のように正規表現を使用できます。
SET serveroutput ON
DECLARE
str VARCHAR2(20):='helloexample';
str_length NUMBER;
c VARCHAR2(20):=NULL;
d NUMBER;
BEGIN
str_length:=LENGTH(str);
FOR i IN 1..str_length
LOOP
IF regexp_instr(c,SUBSTR(str,i,1))>0 THEN
NULL;
ELSE
c:=c||SUBSTR(str,i,1);
END IF;
END LOOP;
dbms_output.put_line(c);
END;
答えは次のようになります。
heloxamp
WM_CONCAT が機能しない場合は、次のトリックを使用できます。
select rtrim(xmlagg(xmlelement(e, str)).extract('//text()'), ',') as output
from (select substr(str, level, 1) str, level l,
row_number() over (partition by substr(str, level, 1)
order by level) rn
from (select 'helloexample' str from dual) d
connect by level <= length(str)
order by level)
where rn = 1;
SQL> select rtrim(xmlagg(xmlelement(e, str)).extract('//text()'), ',') as output
2 from (select substr(str, rownum, 1) str, level l,
3 row_number() over (partition by substr(str, rownum, 1) order by level) rn
4 from (select 'helloexample' str from dual) d
5 connect by level <= length(str)
6 order by level)
7 where rn = 1;
OUTPUT
--------------------------------------------------------------------------------
heloxamp