2

当此 SELECT 仅返回一条带有准备好的字符串的记录时,是否可以使用 SELECT 结果作为 DECODE 参数?例如:

SELECT replace(replace(serialized_data)..)..) 作为结果 FROM 表

在 ONE ROW 中返回以下结果:

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

但是当我把它放到解码时,它被解释为一个参数。是否有可能将此结果“字符串”转换为“纯” sql 代码?;)

谢谢你的帮助。

4

3 回答 3

0

list_agg 或 wm_concat 取决于 oracle 的版本。

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

于 2011-12-28T12:39:31.870 回答
0

您可以使用动态 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;

这只是一个简单的示例,没有显示任何输出等。

于 2011-12-28T12:57:34.700 回答
0

decode您可以使用instrand进行复制substr。下面的示例(可能会被大量整理但有效):

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)

您确实需要在文本末尾有一个分号(VALSEP),以确保您可以找到最后一个值(尽管如果我进一步研究它可以解决这个问题)。

于 2011-12-28T15:56:09.317 回答