Search code examples
plsqloracle11gpipeline

ora-000947 in PIPELINED function


I create some function which returns table. I create record, then make record as 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;

AND MY SIMPLE FUNCTION:

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;

I have 4 variables and all select in variable which have table type, but ora-000947 - not enough values( what I do wrong?


Solution

  • REC has the wrong type.

    It should be NK instead of NK_T, since you deal with a single record.