是否可以使用SELECT結果作爲DECODE參數時,這個SELECT只返回一個記錄有準備的字符串? 例如:如何使用SELECT結果記錄作爲DECODE參數?
SELECT更換(替換(serialized_data)..)..)作爲結果FROM表
以下結果
返回一列:
0,'label0 ',1,'label1',2,'label2'
但是,當我把這個解碼時它被解釋爲一個參數。 是否有方法可行這一結果「串」到「純」 SQL代碼轉換? ;)
感謝您的任何幫助。
是否可以使用SELECT結果作爲DECODE參數時,這個SELECT只返回一個記錄有準備的字符串? 例如:如何使用SELECT結果記錄作爲DECODE參數?
SELECT更換(替換(serialized_data)..)..)作爲結果FROM表
以下結果
返回一列:
0,'label0 ',1,'label1',2,'label2'
但是,當我把這個解碼時它被解釋爲一個參數。 是否有方法可行這一結果「串」到「純」 SQL代碼轉換? ;)
感謝您的任何幫助。
你可能有種被利用的instr
複製decode
和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)雖然,以確保您能找到的最後一個值(儘管如果我進一步研究它可能會解決這個問題)。
謝謝:)小的調整是完美的作品之後。!。 – mack80
list_agg或wm_concat取決於甲骨文的版本。
http://docs.oracle.com/cd/E14072_01/server.112/e10592/functions087.htm
謝謝。不幸的是我有8i,所以LISTAGG不可用。我不確定如何使用wm_concat。沒有分析用途的明確文檔,如何將此結果字符串轉換爲數組/表格? – mack80
您可以使用動態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;
這僅僅是一個簡單的例子,沒有顯示任何輸出等
感謝,但我不能用在這種情況下,動態SQL :( – mack80
@ Mack80 - 你能調用存儲過程,因爲這可能被放置在一個存儲過程 –
您試圖執行的Decode語句是什麼? – xQbert
我正在做一個報告,但有多項選擇的字段只返回一個選項的ID。這些ID的翻譯保存如下:'0 = BLACK; 1 = GREEN; 2 = YELLOW'(在一列中) – mack80