我有一个现有的Customers表,并希望使用存储过程从该表输出每一行。没有输入标准,只需要输出所有记录。
存储过程基本上应该等同于: “SELECT C_ID,LAST,FIRST,DOB,DPHONE,EMAIL FROM customers;”
这看起来很简单,但我无法弄清楚。我的所有搜索都没有解决这个问题。
如何实现这一目标?
编辑:回答我的问题如下。非常简单。
答案 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;