2011-12-28 45 views
2

是否可以使用SELECT結果作爲DECODE參數時,這個SELECT只返回一個記錄有準備的字符串? 例如:如何使用SELECT結果記錄作爲DECODE參數?

SELECT更換(替換(serialized_data)..)..)作爲結果FROM表

以下結果

返回一列:

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

但是,當我把這個解碼時它被解釋爲一個參數。 是否有方法可行這一結果「串」「純」 SQL代碼轉換? ;)

感謝您的任何幫助。

+1

您試圖執行的Decode語句是什麼? – xQbert

+0

我正在做一個報告,但有多項選擇的字段只返回一個選項的ID。這些ID的翻譯保存如下:'0 = BLACK; 1 = GREEN; 2 = YELLOW'(在一列中) – mack80

回答

0

你可能有種被利用的instr複製decodesubstr。下面的例子(這也許可以大大收拾,但工程):

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)雖然,以確保您能找到的最後一個值(儘管如果我進一步研究它可能會解決這個問題)。

+0

謝謝:)小的調整是完美的作品之後。!。 – mack80

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; 

這僅僅是一個簡單的例子,沒有顯示任何輸出等

+0

感謝,但我不能用在這種情況下,動態SQL :( – mack80

+0

@ Mack80 - 你能調用存儲過程,因爲這可能被放置在一個存儲過程 –

相關問題