您是存储过程的新手。 正在使用与Oracle存储过程帮助
select * from table into var
无功动态SQL是一种variable.the变种中包含多个值,当我尝试运行与输入的PROC我得到一个错误:
ORA-01422: exact fetch returns more than requested number of rows
有一种使变量可以使用动态sql保存多行的方式。
您是存储过程的新手。 正在使用与Oracle存储过程帮助
select * from table into var
无功动态SQL是一种variable.the变种中包含多个值,当我尝试运行与输入的PROC我得到一个错误:
ORA-01422: exact fetch returns more than requested number of rows
有一种使变量可以使用动态sql保存多行的方式。
您可以使用表变量,它为您提供结果的内存表。声明表变量类似于标准的变量:
declare @MyVar table (col1 col1type, col2 col2type, etc.)
使用集合变量:
DECLARE
TYPE tt_int IS TABLE OF INTEGER;
var tt_int;
BEGIN
SELECT id
BULK COLLECT
INTO var
FROM table;
END;
你必须bulk collect
结果集为table of
类型,如果你要选择多行。
declare
type record_type is table of <table_name>;
var_records record_type;
begin
select *
bulk collect into var_records
from <table_name>;
end;
/
,你还可以将结果返回到ref cursor
set serveroutput on
DECLARE
REFEXAMPLE SYS_REFCURSOR;
VAR NUMBER ;
col varchar2(50);
BEGIN
OPEN REFEXAMPLE FOR --Here you open the cursor and fill it
SELECT *
FROM (
SELECT 1 VAR, 'a' COL FROM DUAL
UNION ALL
SELECT 2 VAR, 'b' COL FROM DUAL
UNION ALL
SELECT 3 VAR, 'c' COL FROM DUAL
UNION ALL
SELECT 4 VAR, 'd' COL FROM DUAL
UNION ALL
SELECT 5 VAR, 'e' COL FROM DUAL
) EXAMPLETABLE ;
DBMS_OUTPUT.PUT_LINE('var ' || 'col');
DBMS_OUTPUT.PUT_LINE('---------');
LOOP
FETCH REFEXAMPLE INTO VAR, col; --now loop through
EXIT WHEN REFEXAMPLE%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(var || ' ' || col || ' ');
END LOOP;
CLOSE REFEXAMPLE;
end ;
/
var col
---------
1 a
2 b
3 c
4 D
5 e
我们可以看到您的存储过程? – 2011-01-19 13:55:59
Kassos to Quassnoi将Oracle标识为仅来自ORA-01422错误消息文本的数据库。 – APC 2011-01-19 14:05:46