plsql – 创建返回表的Oracle函数

前端之家收集整理的这篇文章主要介绍了plsql – 创建返回表的Oracle函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在包中创建一个返回一个表的函数.我希望在包中调用函数一次,但是可以多次重用数据.虽然我知道我在Oracle中创建了临时表,但我希望能够将事情保持在干燥状态.

到目前为止,这是我所拥有的:

标题

  1. CREATE OR REPLACE PACKAGE TEST AS
  2.  
  3. TYPE MEASURE_RECORD IS RECORD (
  4. L4_ID VARCHAR2(50),L6_ID VARCHAR2(50),L8_ID VARCHAR2(50),YEAR NUMBER,PERIOD NUMBER,VALUE NUMBER
  5. );
  6.  
  7. TYPE MEASURE_TABLE IS TABLE OF MEASURE_RECORD;
  8.  
  9. FUNCTION GET_UPS(
  10. TIMESPAN_IN IN VARCHAR2 DEFAULT 'MONTLHY',STARTING_DATE_IN DATE,ENDING_DATE_IN DATE
  11. ) RETURN MEASURE_TABLE;
  12.  
  13. END TEST;

身体:

  1. CREATE OR REPLACE PACKAGE BODY TEST AS
  2.  
  3. FUNCTION GET_UPS (
  4. TIMESPAN_IN IN VARCHAR2 DEFAULT 'MONTLHY',ENDING_DATE_IN DATE
  5. ) RETURN MEASURE_TABLE IS
  6.  
  7. T MEASURE_TABLE;
  8.  
  9. BEGIN
  10.  
  11. SELECT ...
  12. INTO T
  13. FROM ...
  14.  
  15. ;
  16.  
  17. RETURN T;
  18.  
  19. END GET_UPS;
  20.  
  21. END TEST;

头部编译,身体没有.一个错误信息是’不足够的值’,这可能意味着我应该选择MEASURE_RECORD而不是MEASURE_TABLE.

我失踪了什么

我想你想要一个 pipelined table function.

这样的事情

  1. CREATE OR REPLACE PACKAGE test AS
  2.  
  3. TYPE measure_record IS RECORD(
  4. l4_id VARCHAR2(50),l6_id VARCHAR2(50),l8_id VARCHAR2(50),year NUMBER,period NUMBER,VALUE NUMBER);
  5.  
  6. TYPE measure_table IS TABLE OF measure_record;
  7.  
  8. FUNCTION get_ups(foo NUMBER)
  9. RETURN measure_table
  10. PIPELINED;
  11. END;
  12.  
  13. CREATE OR REPLACE PACKAGE BODY test AS
  14.  
  15. FUNCTION get_ups(foo number)
  16. RETURN measure_table
  17. PIPELINED IS
  18.  
  19. rec measure_record;
  20.  
  21. BEGIN
  22. SELECT 'foo','bar','baz',2010,5,13
  23. INTO rec
  24. FROM DUAL;
  25.  
  26. -- you would usually have a cursor and a loop here
  27. PIPE ROW (rec);
  28.  
  29. RETURN;
  30. END get_ups;
  31. END;

为了简单起见,我删除了你的参数,并没有在函数中实现循环,但是你可以看到原理.

用法

  1. SELECT *
  2. FROM table(test.get_ups(0));
  3.  
  4.  
  5.  
  6. L4_ID L6_ID L8_ID YEAR PERIOD VALUE
  7. ----- ----- ----- ---------- ---------- ----------
  8. foo bar baz 2010 5 13
  9. 1 row selected.

猜你在找的Oracle相关文章