Sql Oracle从包中的函数返回表
如何在不使用游标的情况下从sql包函数返回表?我通常喜欢使用包内的所有对象实现流水线函数 这是结果查询: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
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
我经常看到人们为此使用流水线函数。但也可以参阅本文中的前两个链接,了解更简单的表函数。我经常看到人们为此使用流水线函数。但也可以参阅本文中的前两个链接,了解更简单的表函数。