使用变量和 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;
我很难找到正确的语法来创建带有变量和 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;