簡體   English   中英

Oracle存儲過程幫助

[英]Oracle stored procedure help

HI是存儲過程的新手。 我在使用動態SQL

select * from table into var

var是一個變量。當我嘗試使用輸入運行proc時,var包含多個值,但出現錯誤:

ORA-01422: exact fetch returns more than requested number of rows

有沒有一種方法可以使變量使用動態sql容納多於一行。

使用集合變量:

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;
/

另請參閱我對PL SQL的答案如何選擇所有列

您還可以將結果返回到參考光標

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  

您可以使用表變量,該變量為您提供結果的內存表。 您聲明類似於標准變量的表變量:

declare @MyVar table (col1 col1type, col2 col2type, etc.)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM