2016-06-20 4 views
1

変数と条件付きの関数を作成するための正しい構文を探しています。変数と条件付きのOracle関数を作成します。

create or replace 
FUNCTION createURL(IDName IN varchar2, IDValue IN number) 
    RETURN VARCHAR2 
IS 
    ApplicationURL VARCHAR2(100); 
    AppplicationParm VARCHAR2(255); 
    DBName VARCHAR(100); 

BEGIN 
    select sys_context('USERENV','DB_NAME') AS Instance into DBName FROM DUAL; 

    IF DBName = 'WAMDEV' THEN ApplicationURL := 'http://srpwam10:080/maxi'; 
     ELSIF DBName ='WAMDEVPJ' THEN ApplicationURL := 'http://srpwam10:080/maxi'; 
     ELSIF DBName = 'WAMTST' THEN ApplicationURL := 'http://wamtest/maxi'; 
     ELSIF DBName = 'WAMTSTPJ' THEN ApplicationURL := 'http://wamtest/maximo'; 
     ELSIF DBName = 'WAMQA' THEN ApplicationURL := 'http://wamqa/maxi'; 
     ELSIF DBName = 'WAMQAPJ' THEN ApplicationURL := 'http://wamqa/maximo'; 
     ELSE DBName := 'WAMP'; ApplicationURL := 'http://wam/maxi'; 
    END IF ; 
IDN := IDName; 
    IF IDN = 'workorderid' THEN AppplicationParm := '/ui/?event=loadapp' || CHR(38) || 'value=wotrack' || CHR(38) || 'uniqueid=' || TO_CHAR(IDValue); 
     ELSIF IDN = 'assetuid' THEN AppplicationParm := '/ui/?event=loadapp' || CHR(38) || 'value=asset' || CHR(38) || 'uniqueid=' || TO_CHAR(IDValue); 
     ELSIF IDN = 'locationsid' THEN AppplicationParm := '/ui/?event=loadapp' || CHR(38) || 'value=location' || CHR(38) || 'uniqueid=' || TO_CHAR(IDValue); 
     ELSE AppplicationParm := '/ui/?event=loadapp' || CHR(38) || 'value=sr' || CHR(38) || 'uniqueid=' || TO_CHAR(IDValue); 
    END IF; 

    RETURN 'javascript:void(window.open(''' || ApplicationURL || ApplicationParm || ''',''_blank''))'; 
END; 

コードが正しいかどうかわかりません。何が問題なのですか?私はその機能を作り出すことができません。あなたの助けは大変に感謝しています。

+1

あなたが実際に質問をしていません。あなたのコードはエラーを生成しますか?もしそうなら、どんなエラー?飛び跳ねるものの一つは 'IDN:= IDName;' 'IDN'という変数を定義していないことです。しかし、単に比較を行うために変数を作成するのではなく、比較で直接 'IDNAME'を使うことができます。例えば。 'idname = ... elsif idname = ...' – Boneist

答えて

2

を宣言していないとAppplicationParmは3と2 pでいくつかの時間といくつかの回であります。SQLDeveloperを取得すると、彼はあなたにすべてのエラーを表示します。ここで

はケースである:

CREATE OR REPLACE FUNCTION createURL (IDName IN VARCHAR2, IDValue IN NUMBER) 
    RETURN VARCHAR2 
IS 
    ApplicationURL  VARCHAR2 (100); 
    ApplicationParm VARCHAR2 (255); 
    DBName    VARCHAR (100); 
BEGIN 
    SELECT SYS_CONTEXT ('USERENV', 'DB_NAME') AS Instance INTO DBName FROM DUAL; 
    ApplicationURL := case when DBName = 'WAMDEV' OR DBName = 'WAMDEVPJ' then 'http://srpwam10:9080/maximo' 
          when DBName = 'WAMTST' OR DBName = 'WAMTSTPJ' then 'http://srpwam10:9080/maximo' 
          when DBName = 'WAMQA' OR DBName = 'WAMQAPJ' then 'http://srpwam10:9080/maximo' 
          else 'http://wam/maximo' 
        end; 
    ApplicationParm := case IDName 
         when 'workorderid' THEN '/ui/?event=loadapp' || CHR (38) || 'value=wotrack' || CHR (38) || 'uniqueid=' || TO_CHAR (IDValue) 
         when 'assetuid' THEN '/ui/?event=loadapp' || CHR (38) || 'value=asset' || CHR (38) || 'uniqueid=' || TO_CHAR (IDValue) 
         when 'locationsid' THEN '/ui/?event=loadapp' || CHR (38) || 'value=location' || CHR (38) || 'uniqueid=' || TO_CHAR (IDValue) 
         else '/ui/?event=loadapp' || CHR (38) || 'value=sr' || CHR (38) || 'uniqueid=' || TO_CHAR (IDValue) 
         end; 
    RETURN 'javascript:void(window.open(''' || ApplicationURL || ApplicationParm || ''',''_blank''))'; 
END; 
+0

あなたは私の人生を保存します、ありがとう! –

2

私はあなたのコードをコンパイルしようとしたとエラーにあり

Compilation errors for FUNCTION EPF.CREATEAMPURL 

Error: PLS-00201: identifier 'IDN' must be declared 
Line: 19 
Text: IDN := IDName; 

だから、変数IDN

関連する問題