2016-06-20 3 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 페이지와 약간의 시간과 약간의 시간이다 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

관련 문제