如何使用oracle sql developer从存储过程中的现有表输出多行?

时间:2015-11-28 16:22:03

标签: sql oracle stored-procedures

我有一个现有的Customers表,并希望使用存储过程从该表输出每一行。没有输入标准,只需要输出所有记录。

存储过程基本上应该等同于:  “SELECT C_ID,LAST,FIRST,DOB,DPHONE,EMAIL FROM customers;”

这看起来很简单,但我无法弄清楚。我的所有搜索都没有解决这个问题。

如何实现这一目标?

编辑:回答我的问题如下。非常简单。

2 个答案:

答案 0 :(得分:2)

In Oracle your options are:
1. Use a function and return a REF CURSOR
2. Use a procedure and use a REF CURSOR as an OUT parameter
3. Use a PIPELINED function
4. Use a function and return a collection.

阅读此文档 Overview of Table Functions

在此处查看类似问题Return collection from packaged function for use in select

这种功能的简单样本

CREATE FUNCTION StockPivot(p refcur_pkg.refcur_t) RETURN TickerTypeSet
PIPELINED IS
  out_rec TickerType := TickerType(NULL,NULL,NULL);
  in_rec p%ROWTYPE;
BEGIN
  LOOP
    FETCH p INTO in_rec; 
    EXIT WHEN p%NOTFOUND;
    -- first row
    out_rec.ticker := in_rec.Ticker;
    out_rec.PriceType := 'O';
    out_rec.price := in_rec.OpenPrice;
    PIPE ROW(out_rec);
    -- second row
    out_rec.PriceType := 'C';   
    out_rec.Price := in_rec.ClosePrice;
    PIPE ROW(out_rec);
  END LOOP;
  CLOSE p;
  RETURN;
END;
/

答案 1 :(得分:0)

没关系!刚刚得到它。这很简单。我刚刚这样做了:

    CREATE OR REPLACE PROCEDURE CustomerReport AS
BEGIN
   FOR cus IN (SELECT C_ID, LAST, FIRST, DOB, DPHONE, EMAIL FROM customers)
      LOOP
         dbms_output.put_line(cus.C_ID||' '||cus.FIRST||' '||cus.LAST||' '||cus.DOB||' '||cus.DPHONE||' '||cus.EMAIL);
      END LOOP;                          
END;