2017-05-05 74 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?但也有其他说明) – etsa

+0

是的COMPANY-ID是默认的,第一个例子包含两个附加的字符串下划线_。休息它的所有连字符。 –

+0

如果是这样,请修改并编辑您的问题。澄清你的实际值是否也是如此(例如,当你编写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;