是否可以使用SELECT结果作为DECODE参数,当此SELECT仅返回一条记录与准备好的字符串?例如:
SELECT replace(replace(serialized_data)…)…)作为result FROM table
在一行中返回以下结果:
0, ' label0 ', 1, ' label1 ', 2 ' label2 '
但是当我把它解码时,它被解释为一个参数。是否有可能将此结果"字符串"转换为"纯" sql代码?;)
谢谢你的帮助
您可以使用instr
和substr
来复制decode
。下面的例子(可能需要大量的整理,但是可以正常工作):
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),以确保您可以找到最后一个值(尽管如果我进一步研究它,可能会解决这个问题)。
list_agg或wm_concat取决于oracle的版本。
http://docs.oracle.com/cd/E14072_01/server.112/e10592/functions087.htm您可以使用动态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;
这只是一个简单的例子,没有显示任何输出,等等