我需要将下面的函数从DB2转换为Oracle,有人能帮忙吗?我对DB2一无所知



我需要将下面的函数从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;

最新更新