2017-05-05 14 views
-3

内の文字列を剥ぎ取り、あなただけの、それらを考慮すべき値に過ぎないしたと仮定すると私は入力と同じ組み合わせの下したOracle

COMPANY-ID_ABC_123   ==> This should give three outputs (COMPANY-ID,ABC,123) 
COMPANY-ID     ==> this should give give three outputs such as (COMPANY-ID,null,null) 
COMPANY-ID-FLAG    ==> this should give give three outputs such as (COMPANY-ID,FLAG,null) 
COMPANY-ID-FLAG-ES  ==> this should give give three outputs such as (COMPANY-ID,FLAG,ES) 
COMPANY-ID-ES    ==> this should give give three outputs such as (COMPANY-ID,ES,null) 
IOB-2003    ==> if i give any other string other than the above , it has to just display (IOB-2003,null,null) 
+0

正しく書いたことがありますか? (COMPANY-ID-FLAGやCOMPANY-ID_FLAGなどの奇妙なものが2つまたは3つ見つかりますが、他にも説明があります) – etsa

+0

はいCOMPANY-IDはデフォルトです。アンダースコア_。すべてのハイフンを置いてください。 –

+0

そうなら、plsは質問を修正して編集します。 COMPANY-IDを書くときなど、何か値を意味するか、単に「COMPANY_ID」ですか? – etsa

答えて

0

の下に説明したように、出力変数を返すための機能で私を助けてください複数のif-elsif-endステートメントでハードコードします。それ以外の場合は、入力文字列を解析する必要があります。それを解析しなければならない場合は、最初にCOMPANY-IDからハイフンを削除し、 ' - 'や '_'の文字列を解析します。

CREATE OR REPLACE PROCEDURE getVal 
    (string_in IN varchar2, 
     string_out1 OUT varchar2, 
     string_out2 OUT varchar2, 
     string_out3 OUT varchar2) 
AS 
    string_out1 := 'IOB-2003'; 
    string_out2 := 'null'; 
    string_out3 := 'null'; 

BEGIN 

    IF string_in = 'COMPANY-ID_ABC_123' THEN 
     string_out1 := 'COMPANY-ID'; 
     string_out2 := 'ABC'; 
     string_out3 := '123'; 

    ELSIF string_in = 'COMPANY-ID' THEN 
     string_out1 := 'COMPANY-ID'; 

    ELSIF string_in = 'COMPANY-ID-FLAG' THEN 
     string_out1 := 'COMPANY-ID'; 
     string_out2 := 'FLAG'; 

    ELSIF string_in = 'COMPANY-ID-FLAG-ES' THEN 
     string_out1 := 'COMPANY-ID'; 
     string_out2 := 'FLAG'; 
     string_out3 := 'ES'; 

    ELSIF string_in = 'COMPANY-ID-ES' THEN 
     string_out1 := 'COMPANY-ID'; 
     string_out2 := 'ES'; 

    END IF; 

END; 
関連する問題