行列表的SQL存储过程数据类型

行列表的SQL存储过程数据类型,sql,oracle,stored-procedures,oracle11g,multiple-return-values,Sql,Oracle,Stored Procedures,Oracle11g,Multiple Return Values,我可以使用什么数据类型来存储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 / 例如,使用: 精选的。。。BULK COLLECT INTO语句可以返回多行。

我可以使用什么数据类型来存储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
/
例如,使用:

精选的。。。BULK COLLECT INTO语句可以返回多行。必须设置集合变量以保存结果。您可以声明关联数组或嵌套表,这些数组或嵌套表根据需要增长以容纳整个结果集


一种方法是使用
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
/
另外,使用
VARCHAR2
代替
VARCHAR
。它应该没有大小,因为带有大小的过程参数将无法编译

可以调用该过程将光标接收到本地
ref cursor
变量中

DECLARE
res_cur SYS_REFCURSOR;
BEGIN
    handleFailedCalls('Xnumber1', res_cur );
END;
/

如果我通过从联合表(如
employees LEFT JOIN users
)中选择数据,以这种方式进行批量收集会怎么样?所有_员工中是否都会有两个表的所有列?@ShaahinShemshian see
DECLARE
res_cur SYS_REFCURSOR;
BEGIN
    handleFailedCalls('Xnumber1', res_cur );
END;
/