2011-12-28 21 views
2

このSELECTが準備された文字列を持つのレコードをの1つだけ返すときに、SELECT結果をDECODEパラメータとして使用できますか?例えば :DECODEパラメータとしてSELECT結果レコードを使用するには?

SELECTを置き換える((serialized_data)を交換..)..)結果としてテーブルから1行の結果を次の

戻り値:

0 'label0 '、1、' label1 '、2、' label2 '

これをデコードすると、1つのパラメータとして解釈されます。 この結果を変換する可能性はありますか"string""純粋" SQLコード? ;)

ありがとうございました。

+1

実装しようとしているDecodeステートメントは何ですか? – xQbert

+0

私はレポートを作成していますが、複数の選択肢を持つフィールドは選択肢のIDだけを返しています。これらのIDの翻訳は、次のように保存されます。 '0 = BLACK; 1 = GREEN; 2 = YELLOW'(1つの列) – mack80

答えて

0

あなたは一種の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)を持っている必要がありますそれをさらに調べてもそれを回避することは可能ですが)。

+0

感謝! – mack80

0

list_aggまたはwm_concatは、oracleのバージョンによって異なります。

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

+0

ありがとうございます。残念ながら私は8iを持っているので、LISTAGGは利用できません。私はwm_concatの使い方がわかりません。この結果の文字列を配列/テーブルに変換する方法については、分析用途の明確な文書はありませんか? – 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 - ストアドプロシージャを呼び出すことができますので、これはストアドプロシージャに置くことができます –

関連する問題