Sql Oracle从包中的函数返回表

Sql Oracle从包中的函数返回表,sql,database,oracle,Sql,Database,Oracle,如何在不使用游标的情况下从sql包函数返回表?我通常喜欢使用包内的所有对象实现流水线函数 这是结果查询: select * from table(pkg_example_pipeline.F_PIPELINE_EXEMPLE(0)); create or replace PACKAGE pkg_example_pipeline IS -- *********** TYPES TYPE TYPE_EXEMPLE is record ( id N

如何在不使用游标的情况下从sql包函数返回表?

我通常喜欢使用包内的所有对象实现流水线函数

这是结果查询:

select *
from table(pkg_example_pipeline.F_PIPELINE_EXEMPLE(0));
create or replace PACKAGE pkg_example_pipeline IS

-- *********** TYPES
TYPE TYPE_EXEMPLE is record (
    id                      NUMBER(10,0),
    name                    VARCHAR2(100),
    date_test               DATE
);

TYPE v_table_exemple is table of TYPE_EXEMPLE;
-- *********** 

-- *********** PIPELINE FUNCTIONS
FUNCTION F_PIPELINE_EXEMPLE (pId NUMBER)
RETURN v_table_exemple  pipelined;

END; --PACKAGE SPEC
/

create or replace PACKAGE BODY pkg_example_pipeline
IS
-- ***********  CURSORs 
/**
* Just if you need 
**/

CURSOR cr_exemple
IS
 SELECT 0 id, 'name' name, sysdate date_test 
 from dual;

-- ***********  

-- *********** PIPELINE FUNCTIONS
--POSICAO DIARIA
FUNCTION F_PIPELINE_EXEMPLE (pId NUMBER)
RETURN v_table_exemple  pipelined
IS                  
    row_exemple TYPE_EXEMPLE;

BEGIN

   FOR reg_exemple IN  (SELECT 0 id, 'name' name, sysdate date_test from dual) LOOP
        BEGIN
            row_exemple.id        := reg_exemple.id;
            row_exemple.name      := reg_exemple.name;
            row_exemple.date_test := reg_exemple.date_test;

            pipe row (row_exemple);

        EXCEPTION
        WHEN others THEN
            dbms_output.put_line('error: ' || sqlerrm);
            row_exemple.name := 'error: ' || sqlerrm;
            pipe row (row_exemple);
        END;

   END LOOP;



EXCEPTION
WHEN others THEN
     ROLLBACK;
END;

-- *********** 
END; --PKG BOBY
软件包:

select *
from table(pkg_example_pipeline.F_PIPELINE_EXEMPLE(0));
create or replace PACKAGE pkg_example_pipeline IS

-- *********** TYPES
TYPE TYPE_EXEMPLE is record (
    id                      NUMBER(10,0),
    name                    VARCHAR2(100),
    date_test               DATE
);

TYPE v_table_exemple is table of TYPE_EXEMPLE;
-- *********** 

-- *********** PIPELINE FUNCTIONS
FUNCTION F_PIPELINE_EXEMPLE (pId NUMBER)
RETURN v_table_exemple  pipelined;

END; --PACKAGE SPEC
/

create or replace PACKAGE BODY pkg_example_pipeline
IS
-- ***********  CURSORs 
/**
* Just if you need 
**/

CURSOR cr_exemple
IS
 SELECT 0 id, 'name' name, sysdate date_test 
 from dual;

-- ***********  

-- *********** PIPELINE FUNCTIONS
--POSICAO DIARIA
FUNCTION F_PIPELINE_EXEMPLE (pId NUMBER)
RETURN v_table_exemple  pipelined
IS                  
    row_exemple TYPE_EXEMPLE;

BEGIN

   FOR reg_exemple IN  (SELECT 0 id, 'name' name, sysdate date_test from dual) LOOP
        BEGIN
            row_exemple.id        := reg_exemple.id;
            row_exemple.name      := reg_exemple.name;
            row_exemple.date_test := reg_exemple.date_test;

            pipe row (row_exemple);

        EXCEPTION
        WHEN others THEN
            dbms_output.put_line('error: ' || sqlerrm);
            row_exemple.name := 'error: ' || sqlerrm;
            pipe row (row_exemple);
        END;

   END LOOP;



EXCEPTION
WHEN others THEN
     ROLLBACK;
END;

-- *********** 
END; --PKG BOBY

我通常喜欢用包中的所有对象实现流水线函数

这是结果查询:

select *
from table(pkg_example_pipeline.F_PIPELINE_EXEMPLE(0));
create or replace PACKAGE pkg_example_pipeline IS

-- *********** TYPES
TYPE TYPE_EXEMPLE is record (
    id                      NUMBER(10,0),
    name                    VARCHAR2(100),
    date_test               DATE
);

TYPE v_table_exemple is table of TYPE_EXEMPLE;
-- *********** 

-- *********** PIPELINE FUNCTIONS
FUNCTION F_PIPELINE_EXEMPLE (pId NUMBER)
RETURN v_table_exemple  pipelined;

END; --PACKAGE SPEC
/

create or replace PACKAGE BODY pkg_example_pipeline
IS
-- ***********  CURSORs 
/**
* Just if you need 
**/

CURSOR cr_exemple
IS
 SELECT 0 id, 'name' name, sysdate date_test 
 from dual;

-- ***********  

-- *********** PIPELINE FUNCTIONS
--POSICAO DIARIA
FUNCTION F_PIPELINE_EXEMPLE (pId NUMBER)
RETURN v_table_exemple  pipelined
IS                  
    row_exemple TYPE_EXEMPLE;

BEGIN

   FOR reg_exemple IN  (SELECT 0 id, 'name' name, sysdate date_test from dual) LOOP
        BEGIN
            row_exemple.id        := reg_exemple.id;
            row_exemple.name      := reg_exemple.name;
            row_exemple.date_test := reg_exemple.date_test;

            pipe row (row_exemple);

        EXCEPTION
        WHEN others THEN
            dbms_output.put_line('error: ' || sqlerrm);
            row_exemple.name := 'error: ' || sqlerrm;
            pipe row (row_exemple);
        END;

   END LOOP;



EXCEPTION
WHEN others THEN
     ROLLBACK;
END;

-- *********** 
END; --PKG BOBY
软件包:

select *
from table(pkg_example_pipeline.F_PIPELINE_EXEMPLE(0));
create or replace PACKAGE pkg_example_pipeline IS

-- *********** TYPES
TYPE TYPE_EXEMPLE is record (
    id                      NUMBER(10,0),
    name                    VARCHAR2(100),
    date_test               DATE
);

TYPE v_table_exemple is table of TYPE_EXEMPLE;
-- *********** 

-- *********** PIPELINE FUNCTIONS
FUNCTION F_PIPELINE_EXEMPLE (pId NUMBER)
RETURN v_table_exemple  pipelined;

END; --PACKAGE SPEC
/

create or replace PACKAGE BODY pkg_example_pipeline
IS
-- ***********  CURSORs 
/**
* Just if you need 
**/

CURSOR cr_exemple
IS
 SELECT 0 id, 'name' name, sysdate date_test 
 from dual;

-- ***********  

-- *********** PIPELINE FUNCTIONS
--POSICAO DIARIA
FUNCTION F_PIPELINE_EXEMPLE (pId NUMBER)
RETURN v_table_exemple  pipelined
IS                  
    row_exemple TYPE_EXEMPLE;

BEGIN

   FOR reg_exemple IN  (SELECT 0 id, 'name' name, sysdate date_test from dual) LOOP
        BEGIN
            row_exemple.id        := reg_exemple.id;
            row_exemple.name      := reg_exemple.name;
            row_exemple.date_test := reg_exemple.date_test;

            pipe row (row_exemple);

        EXCEPTION
        WHEN others THEN
            dbms_output.put_line('error: ' || sqlerrm);
            row_exemple.name := 'error: ' || sqlerrm;
            pipe row (row_exemple);
        END;

   END LOOP;



EXCEPTION
WHEN others THEN
     ROLLBACK;
END;

-- *********** 
END; --PKG BOBY
我经常看到人们为此使用流水线函数。但也可以参阅本文中的前两个链接,了解更简单的表函数。我经常看到人们为此使用流水线函数。但也可以参阅本文中的前两个链接,了解更简单的表函数。