问题描述
我需要将以下功能从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 ;
解决方法
所有未使用的参数都很奇怪。如果未使用,则需要将其删除。
对我来说看起来很简单,它只是从函数中返回自定义表/类型。这是我为解决您的问题而付出的努力
第一步是创建自定义类型,如果没有的话
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_WORKDEPT);
Return l_customType;
End;
,
DB2函数被声明为DETERMINISTIC。这意味着它将为n次调用返回相同的行集。浏览此DB2代码,您将不需要Oracle中的函数,而只需像
中那样为select语句创建视图。CREATE VIEW explainmsgs AS SELECT id,deptnum,avgsal,empcnt,workdept FROM emp3 /