使用变量和 if 条件创建 Oracle 函数

Create Oracle function with variables and if condition

我很难找到正确的语法来创建带有变量和 if 条件的函数。

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;

我不确定代码是否正确,有什么问题?我无法创建该功能。非常感谢您的帮助。

我尝试编译你的代码,但出现错误

Compilation errors for FUNCTION EPF.CREATEAMPURL

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

所以你没有声明变量 IDN

而 AppplicationParm 有时是 2 p,有时是 3。获取 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;