PIPELINED 函数中的 ora-000947
ora-000947 in PIPELINED function
我创建了一些 returns table 的函数。我创建记录,然后将记录设为 table.
CREATE OR REPLACE PACKAGE FOR_SELECT AS TYPE NK IS RECORD (
SHT NUMBER,
VVD NUMBER,
NEKOM NUMBER,
N_GOL NUMBER);
TYPE NK_T IS TABLE OF NK; FUNCTION NEK_SLU_PR(W_KOD VARCHAR2)
RETURN NK_T PIPELINED; END FOR_SELECT;
和我的简单函数:
CREATE OR REPLACE PACKAGE BODY FOR_SELECT AS FUNCTION NEK_SLU_PR(W_KOD VARCHAR2)
RETURN NK_T PIPELINED
AS
REC NK_T;
SHT NUMBER;
VVD NUMBER;
NEKOM NUMBER;
N_GOL NUMBER;
BEGIN
SHT := 3;
VVD := 4;
NEKOM := 5;
N_GOL := 6;
SELECT SHT,
VVD,
NEKOM,
N_GOL
INTO REC
FROM DUAL;
PIPE ROW (REC);
RETURN;
END NEK_SLU_PR;END FOR_SELECT;
我有 4 个变量,变量中的所有 select 都具有 table 类型,但是 ora-000947 - 没有足够的值(我做错了什么?
REC
类型错误。
它应该是 NK
而不是 NK_T
,因为你处理的是一条记录。
--Try this it will help you to understand about pipelined functions
CREATE OR REPLACE TYPE NK IS OBJECT (
SHT NUMBER,
VVD NUMBER,
NEKOM NUMBER,
N_GOL NUMBER);
CREATE OR REPLACE TYPE NK_T IS TABLE OF NK;
CREATE OR REPLACE FUNCTION NEK_SLU_PR(
W_KOD VARCHAR2)
RETURN NK_T PIPELINED
AS
REC NK_T;
SHT NUMBER;
VVD NUMBER;
NEKOM NUMBER;
N_GOL NUMBER;
BEGIN
SHT := 3;
VVD := 4;
NEKOM := 5;
N_GOL := 6;
SELECT NK(SHT, VVD, NEKOM, N_GOL) BULK COLLECT INTO REC FROM DUAL;
FOR I IN 1..REC.COUNT
LOOP
PIPE ROW( NK( REC(I).sht,REC(I).vvd, REC(I).nekom, REC(I).n_gol ) ) ;
END LOOP ;
RETURN;
END NEK_SLU_PR;
---------------------------------------------OUTPUT-------------------------------------------
select * from table(NEK_SLU_PR('av'));
SHT VVD NEKOM N_GOL
3 4 5 6
---------------------------------------------OUTPUT-------------------------------------------
我创建了一些 returns table 的函数。我创建记录,然后将记录设为 table.
CREATE OR REPLACE PACKAGE FOR_SELECT AS TYPE NK IS RECORD (
SHT NUMBER,
VVD NUMBER,
NEKOM NUMBER,
N_GOL NUMBER);
TYPE NK_T IS TABLE OF NK; FUNCTION NEK_SLU_PR(W_KOD VARCHAR2)
RETURN NK_T PIPELINED; END FOR_SELECT;
和我的简单函数:
CREATE OR REPLACE PACKAGE BODY FOR_SELECT AS FUNCTION NEK_SLU_PR(W_KOD VARCHAR2)
RETURN NK_T PIPELINED
AS
REC NK_T;
SHT NUMBER;
VVD NUMBER;
NEKOM NUMBER;
N_GOL NUMBER;
BEGIN
SHT := 3;
VVD := 4;
NEKOM := 5;
N_GOL := 6;
SELECT SHT,
VVD,
NEKOM,
N_GOL
INTO REC
FROM DUAL;
PIPE ROW (REC);
RETURN;
END NEK_SLU_PR;END FOR_SELECT;
我有 4 个变量,变量中的所有 select 都具有 table 类型,但是 ora-000947 - 没有足够的值(我做错了什么?
REC
类型错误。
它应该是 NK
而不是 NK_T
,因为你处理的是一条记录。
--Try this it will help you to understand about pipelined functions
CREATE OR REPLACE TYPE NK IS OBJECT (
SHT NUMBER,
VVD NUMBER,
NEKOM NUMBER,
N_GOL NUMBER);
CREATE OR REPLACE TYPE NK_T IS TABLE OF NK;
CREATE OR REPLACE FUNCTION NEK_SLU_PR(
W_KOD VARCHAR2)
RETURN NK_T PIPELINED
AS
REC NK_T;
SHT NUMBER;
VVD NUMBER;
NEKOM NUMBER;
N_GOL NUMBER;
BEGIN
SHT := 3;
VVD := 4;
NEKOM := 5;
N_GOL := 6;
SELECT NK(SHT, VVD, NEKOM, N_GOL) BULK COLLECT INTO REC FROM DUAL;
FOR I IN 1..REC.COUNT
LOOP
PIPE ROW( NK( REC(I).sht,REC(I).vvd, REC(I).nekom, REC(I).n_gol ) ) ;
END LOOP ;
RETURN;
END NEK_SLU_PR;
---------------------------------------------OUTPUT-------------------------------------------
select * from table(NEK_SLU_PR('av'));
SHT VVD NEKOM N_GOL
3 4 5 6
---------------------------------------------OUTPUT-------------------------------------------