我试图编写一个函数,根据用户在月度报表中所做的选择来显示每月数据的值。下面的代码片段只是试图获取嵌套表中的值,并且一旦数据在嵌套表中成功加载,我将调用函数来显示表。我尝试了一些东西;但在加载数据时遇到问题。下面是2个不同的SQL来创建这个函数,但他们都得到相同的错误关于不正确的值;我已经尝试了一些事情,但无济于事:无法将值存储到oracle中的嵌套表
片段1:
/* Formatted on 10/16/2012 8:40:45 AM (QP5 v5.215.12089.38647) */
CREATE OR REPLACE TYPE tempObject AS OBJECT
(
kpiid number,
kpigroup VARCHAR2 (300)
);
CREATE OR REPLACE TYPE tempTable AS TABLE OF tempObject;
CREATE OR REPLACE FUNCTION KPI_HORIZON.Monthly_All_Data (
mainarea IN VARCHAR2)
RETURN tempTable
IS
MonthlyData temptable := temptable();
n INTEGER := 0;
BEGIN
IF (mainarea = 'ALL')
THEN
FOR r IN (SELECT DISTINCT kpiid, kpigroup
FROM kpi_summary_reporting
WHERE kpifrequency = 'Monthly' AND active_ind = 'Y')
LOOP
monthlydata.EXTEND;
n := n + 1;
monthlydata (n) := tempobject (r.kpiid, r.kpigroup);
END LOOP;
END IF;
RETURN MonthlyData;
END;
错误:[错误] PLS-00306(26:29):PLS-00306:错号码或类型的参数来电 'TEMPOBJECT'
Snippet2:
/* Formatted on 10/16/2012 8:27:22 AM (QP5 v5.215.12089.38647) */
CREATE OR REPLACE TYPE tempObject AS OBJECT
(
kpiid NUMBER,
kpigroup VARCHAR2 (300)
);
CREATE OR REPLACE TYPE tempTable AS TABLE OF tempObject;
CREATE OR REPLACE FUNCTION KPI_HORIZON.Monthly_All_Data (
mainarea IN VARCHAR2)
RETURN tempTable
AS
MonthlyData temptable := temptable();
BEGIN
IF (mainarea = 'ALL')
THEN
SELECT DISTINCT ksr.kpiid, ksr.kpigroup
INTO MonthlyData
FROM kpi_summary_reporting ksr
WHERE kpifrequency = 'Monthly' AND active_ind = 'Y';
ELSE
SELECT DISTINCT kpiid, kpigroup
INTO MonthlyData
FROM kpi_summary_reporting;
END IF;
RETURN MonthlyData;
END;
错误:[错误] ORA-00947(24:9):PL/SQL:ORA-00947:不够值
如果我尝试运行此查询我得到以下错误:[错误] ORA-02315(10:14):PL/SQL:ORA-02315:数目不正确的默认构造函数的参数 – user1750578
@ user1750578 - 您的系统中定义的“tempObject”是否与问题中定义的方式完全相同?如果我在模式中创建一个虚拟的'kpi_summary_reporting'表并删除'KPI_HORIZON'模式限定符,则代码在我的环境中工作。 –