[英]SQL Stored Procedure data type for list of rows
What data type can I use to store all rows found by SELECT query?我可以使用什么数据类型来存储 SELECT 查询找到的所有行?
CREATE OR REPLACE PROCEDURE handleFailedCalls(xNumber in varchar(10)) AS
result {DATA TYPE I WANT};
BEGIN
select * into result
from CALLS c1
where c1.status = 'fail'
END
/
One way is to use a REFCURSOR
variable of OUT
type.一种方法是使用
OUT
类型的REFCURSOR
变量。
CREATE OR REPLACE PROCEDURE handleFailedCalls(xNumber in varchar2,
p_result OUT SYS_REFCURSOR
) AS
BEGIN
OPEN p_result FOR select * from CALLS c1
where c1.status = 'fail'
END
/
Also, use VARCHAR2
instead of VARCHAR
.此外,使用
VARCHAR2
而不是VARCHAR
。 It should be without the size, as procedure arguments with size won't compile.它应该没有大小,因为具有大小的过程参数不会编译。
The procedure can be called to receive the cursor into a local ref cursor
variable.可以调用该过程以将游标接收到本地
ref cursor
变量中。
DECLARE
res_cur SYS_REFCURSOR;
BEGIN
handleFailedCalls('Xnumber1', res_cur );
END;
/
Use BULK COLLECT , example:使用BULK COLLECT ,例如:
DECLARE TYPE emp_typ IS TABLE OF employees%ROWTYPE INDEX BY PLS_INTEGER; all_employees emp_typ; BEGIN SELECT * BULK COLLECT INTO all_employees FROM employees;
A SELECT ... BULK COLLECT INTO statement can return multiple rows.
SELECT ... BULK COLLECT INTO 语句可以返回多行。 You must set up collection variables to hold the results.
您必须设置集合变量来保存结果。 You can declare associative arrays or nested tables that grow as needed to hold the entire result set.
您可以声明根据需要增长以保存整个结果集的关联数组或嵌套表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.