我的表结构如下:
desc temp_table ;
Name Null? Type
student_name VARCHAR2(500)
Is_delete NUMBER(2)
使用pl sql程序我试图将上表的所有值存储到变量中。
如果表格有多行,那么我会收到类似
的错误ORA-01422:精确提取返回超过请求的行数
所以不使用游标我们如何在变量中存储多行?
答案 0 :(得分:1)
定义两种集合类型:
CREATE OR REPLACE TYPE StringList IS TABLE OF VARCHAR2(4000);
/
CREATE OR REPLACE TYPE BooleanList IS TABLE OF NUMBER(1,0);
/
使用BULK COLLECT INTO
:
CREATE OR REPLACE PROCEDURE UPDATE_TABLE
AS
Names StringList;
Del BooleanList;
BEGIN
DBMS_OUTPUT.ENABLE(1000000);
SELECT student_name,
Is_delete
BULK COLLECT INTO
Names,
Del
FROM temp_table
WHERE MODIFIED_DATE >= TRUNC( SYSDATE )
AND MODIFIED_DATE < TRUNC( SYSDATE ) + INTERVAL '1' DAY;
DBMS_OUTPUT.PUT_LINE ('Number Of Names: ' || Names.COUNT );
DBMS_OUTPUT.PUT_LINE ('Number Of Del: ' || Del.COUNT ); -- Will always be the same amount
FOR i IN 1 .. Names.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ( Names(i) || ', ' || Del(i) );
END LOOP;
END;
/