[英]ORACLE expression is of wrong type on pipelined function (multiple joins table)
我正在編寫一個帶有流水線函數的 Oracle 包來獲取多條記錄,查詢是關於多個連接表,這將保存到另一個表中,我為類型記錄創建了一個TYPE RECORD和TABLE TYPE ,然后我創建了帶有查詢的流水線函數,但是當我編譯包時,我收到一個錯誤“表達式類型錯誤” 。
下面是定義包:
CREATE OR REPLACE PACKAGE MYPACKAGE_PKG AS
TYPE GLD_R IS RECORD (
ID NUMBER,
PRCCVE NUMBER(7,0),
LOTCVE NUMBER(7,0),
EPCSEQ NUMBER(18,0),
EPCBNK CHAR(3)
);
TYPE GLD_T IS TABLE OF GLD_R;
FUNCTION MY_FUNCTION(_NUM NUMBER) RETURN GLD_T PIPELINED;
END;
這是身體包:
CREATE OR REPLACE PACKAGE BODY MYPACKAGE_PKG AS
FUNCTION MY_FUNCTION(_NUM NUMBER) RETURN GLD_T PIPELINED
AS
CURSOR T_CUR IS
SELECT
T1.ID,
T2.COLUMN01,
T2.COLUMN02,
T3.COLUMN01,
T3.COLUMN02
FROM
TABLE01 T1
INNER JOIN TABLE02 T2 ON
T1.COLUMN03 = T2.ID
INNER JOIN TABLE03 T3 ON
T1.COLUMN04 = T2.ID
WHERE
T1.COLUMN01 = _NUM
BEGIN
FOR REC IN T_CUR LOOP
PIPE ROW (REC);
END LOOP;
END MY_FUNCTION;
END;
你能說我,我做錯了什么嗎?
應該是這樣的:
首先是表(這樣編譯就不會失敗):
SQL> create table table01 (id number,column01 number, column03 number, column04 number);
Table created.
SQL> create table table02 (id number, column01 number, column02 number);
Table created.
SQL> create table table03 (id number, column01 number, column02 number);
Table created.
包裝規格:
SQL> CREATE OR REPLACE PACKAGE MYPACKAGE_PKG AS
2
3 TYPE GLD_R IS RECORD (
4 ID NUMBER,
5 PRCCVE NUMBER(7,0),
6 LOTCVE NUMBER(7,0),
7 EPCSEQ NUMBER(18,0),
8 EPCBNK CHAR(3)
9 );
10
11 TYPE GLD_T IS TABLE OF GLD_R;
12
13 FUNCTION MY_FUNCTION(p_NUM NUMBER) RETURN GLD_T PIPELINED;
14
15 END;
16 /
Package created.
包體:
SQL> CREATE OR REPLACE PACKAGE BODY MYPACKAGE_PKG AS
2
3 FUNCTION MY_FUNCTION(p_NUM NUMBER) RETURN GLD_T PIPELINED
4 AS
5 CURSOR T_CUR IS
6 SELECT
7 T1.ID,
8 T2.COLUMN01 t2c01,
9 T2.COLUMN02 t2c02,
10 T3.COLUMN01 t3c01,
11 T3.COLUMN02 t3c02
12 FROM
13 TABLE01 T1
14 INNER JOIN TABLE02 T2 ON
15 T1.COLUMN03 = T2.ID
16 INNER JOIN TABLE03 T3 ON
17 T1.COLUMN04 = t3.id -- not T2.ID
18 WHERE
19 T1.COLUMN01 = p_NUM;
20
21 myrec gld_r;
22 BEGIN
23 FOR REC IN T_CUR LOOP
24 myrec.id := rec.id;
25 myrec.prccve := rec.t2c01;
26 myrec.lotcve := rec.t2c02;
27 myrec.epcseq := rec.t3c01;
28 myrec.epcbnk := rec.t3c02;
29 PIPE ROW (myrec);
30 END LOOP;
31 END MY_FUNCTION;
32
33 END;
34 /
Package body created.
SQL>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.