Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plsql ora-000947在流水线功能中_Plsql_Oracle11g_Pipeline - Fatal编程技术网

Plsql ora-000947在流水线功能中

Plsql ora-000947在流水线功能中,plsql,oracle11g,pipeline,Plsql,Oracle11g,Pipeline,我创建了一些返回表的函数。我创建记录,然后将记录作为表 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_SE

我创建了一些返回表的函数。我创建记录,然后将记录作为表

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 in变量都有表类型,但ora-000947-值不够(我做错了什么?

REC
的类型不正确

它应该是
NK
,而不是
NK\u T
,因为您处理的是单个记录

--试试这个,它将帮助您了解流水线函数

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-------------------------------------------