문제

Is it possible to use SELECT result as DECODE parameters when this SELECT returns only one record with prepared string? For example:

SELECT replace(replace(serialized_data)..)..) as result FROM table

Returns following result in ONE ROW:

0,'label0',1,'label1',2,'label2'

But when I put this to DECODE it's being interpreted as ONE PARAMETER. Is there possiblity to convert this result "string" to "pure" sql code? ;)

Thanks for any help.

도움이 되었습니까?

해결책

You could kind of replicate decode by use of instr and substr. An example below (which could probably be tidied up considerably but works):

select DTXT
      ,Nvl(
         Substr(
           DTXT
          ,Instr(DTXT, SEARCHTXT || VALMTCH)
           + Length(SEARCHTXT || VALMTCH)
          ,  Instr(DTXT, VALSEP, Instr(DTXT, SEARCHTXT || VALMTCH))
           - Instr(DTXT, SEARCHTXT || VALMTCH)
           - Length(SEARCHTXT || VALMTCH))
        ,CASEOTHER)
         as TXTMATCH
  from (select '0=BLACK;1=GREEN;2=YELLOW;' as DTXT
              ,'1' as SEARCHTXT
              ,';' as VALSEP
              ,'=' as VALMTCH
              ,'OTHER' as CASEOTHER
          from Dual)

You do need to have a semi-colon (VALSEP) at the end of the text though to ensure you can find the last value (though it's possible to work around that if I looked into it further).

다른 팁

list_agg or wm_concat depending on version of oracle.

http://docs.oracle.com/cd/E14072_01/server.112/e10592/functions087.htm

You can use dynamic SQL:

declare
  DECTXT   varchar2(4000);
begin
  select replace(replace(serialized_data)..)..) as result into dectxt from table;
  execute immediate 'select decode(col1,' || DECTXT || ') from tab1';
end;

This is just a quick example, not showing any output, etc.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top