我需要将下面的函数从DB2转换为Oracle,有人能帮忙吗?我对DB2:一无所知
CREATE FUNCTION READMSGS( SOURCE_NAME VARCHAR(12), SOURCE_SCHEMA VARCHAR(12), SOURCE_VERSION VARCHAR(64), EXPLAIN_LEVEL CHAR(1))
RETURNS TABLE ( ID varchar(20),
DEPTNUM INT,
AVGSAL DECIMAL (9,2),
EMPCNT INT,
WORKDEPT INT )
LANGUAGE SQL
DETERMINISTIC
NO EXTERNAL ACTION
READS SQL DATA
RETURN
SELECT ID,
DEPTNUM,
AVGSAL,
EMPCNT,
WORKDEPT
FROM EMP3 ;
DB2函数被声明为DETERMINISTIC。这意味着它将为n次调用返回相同的行集。浏览一下这段DB2代码,您将不需要Oracle中的函数,而是像中那样为select语句创建一个视图
CREATE VIEW explainmsgs AS选择id,deptnum,avgsal,empcnt,工作部门自emp3/
所有参数都未使用,这有点奇怪。如果它们未使用,则需要将其移除。
对我来说,这看起来很简单——它只是从函数返回一个自定义表/类型。这是我为解决你的问题所做的薄弱努力
第一步是创建自定义类型,如果你没有任何
create or replace type CustomerType(
ID Varchar2(20),
DEPTNUM Number,
AVGSAL Number,
EMPCNT Number,
WORKDEPT Number
);
plsql中的第二个修改函数
FUNCTION EXPLAINSMSGS(SOURCE_NAME in VARCHAR2,SOURCE_SCHEMA in VARCHAR2, SOURCE_VERSION in VARCHAR2,EXPLAIN_LEVEL in Varchar2) return record is
l_customType CustomerType;
l_ID Varchar2(20);
l_DEPTNUM Number;
l_AVGSAL Nubmer;
l_EMPCNT Number,
l_WORKDEPT Varchar2(100);
Begin
SELECT ID,
DEPTNUM,
AVGSAL,
EMPCNT,
WORKDEPT
INTO l_ID,
l_DEPTNUM,
l_AVGSAL,
l_EMPCNT,
l_WORKDEPT
FROM EMP3 ;
l_customType :=CustomerType(l_ID,l_DEPTNUM,l_AVGSAL,l_EMPCNT,l_WORKDEPT);
Return l_customType;
End;