2017-11-29 3 views
0

Oracle UDFを初めて使用しています。私は、CベースのUDF myUDFs.doStuffを呼び出すOracle UDF UDF_DoStuffを以下のように持っています。Oracle UDFに関する問題

私は、クエリを実行しているユーザー名を取得し、myUDFs.doStuffにそれを渡すためにそれを修正しようとしています

FUNCTION UDF_DoStuff (
    str1 IN VARCHAR2, 
    str2 IN VARCHAR2 
) 
RETURN VARCHAR2 AS output VARCHAR2(50); 
BEGIN 
    output:= CASE 
    WHEN str2 = 'x' THEN myUDFs.doStuff(str1,'a') 
    WHEN str2 = 'y' THEN myUDFs.doStuff(str1,'b') 
    ELSE null 
END; 
RETURN output; 
END; 

を作成したり、交換してください。

create or replace 
FUNCTION UDF_DoStuff (
    str1 IN VARCHAR2, 
    str2 IN VARCHAR2 
) 
RETURN VARCHAR2 AS output VARCHAR2(50); 
uname VARCHAR2(50); 
BEGIN 
    select SYS_CONTEXT('USERENV', 'SESSION_USER') into uname from dual; 
    output:= CASE 
    WHEN str2 = 'x' THEN myUDFs.doStuff(str1,'a', uname) 
    WHEN str2 = 'y' THEN myUDFs.doStuff(str1,'b', uname) 
    ELSE null 
END; 
RETURN output; 
END; 

しかし、文output:= CASEの近くに次のエラーが表示されます。どのように私はそれを動作させることができる任意の考え?代わりに、このような

Error(10,4): PL/SQL: Statement ignored 
+0

あなたのケースステートメントのように見えますが、ENDが必要です。それに加えて – markg

+0

SQL * Plusですべての開発を行う場合は、今後マニュアルをブックマークする価値があります。https://docs.oracle.com/database/121/SQPUG/ch_twelve041.htm #SQPUG124 –

答えて

0

使用、:

select SYS_CONTEXT('USERENV', 'SESSION_USER'), 
    CASE 
    WHEN str2 = 'x' THEN myUDFs.doStuff(str1,'a', SYS_CONTEXT('USERENV', 'SESSION_USER')) 
    WHEN str2 = 'y' THEN myUDFs.doStuff(str1,'b', SYS_CONTEXT('USERENV', 'SESSION_USER')) 
    ELSE null 
    END 
into uname, output 
from dual; 

Case-When文がpl/sqlif-then文と同等のものを提供するために、SQL内で使用されています。

関連する問題