2016-12-08 8 views
1

table1から、特定の列から値を収集したいと思います。しようとしたとき、まず第一に、私は別のテーブルをコピーすることを試みたが、私は立ち往生:行数をカウントするテーブルPL/SQLのすべての行を繰り返します

for row in row_count 
    for column in column_count 
     insert into table2 at (x,y) value from (row,column) 
     column++ 
    end 
row++ 
end 

私の第一の機能である:最初の印刷値へ

はその後
create or replace FUNCTION func_count_rows(table_name IN varchar2, 
debug boolean default false) 
RETURN number IS 
    total number(2) := 0; 
BEGIN 

IF debug = true THEN 

DBMS_OUTPUT.put('Function count rows: '); 
DBMS_OUTPUT.PUT_LINE('select count(*) from ' || table_name || ';'); 
DBMS_OUTPUT.put('Returns: '); 
DBMS_OUTPUT.PUT_LINE(''); 

    END IF; 


execute immediate 'select count(*) from ' || table_name into total; 

    RETURN total; 
END; 

私の手順私はここにこだわった:

create or replace procedure gather_values (rows_quantity in VARCHAR2, 
    column_count in VARCHAR2, 
    debug boolean default false 
    ) 
    is begin 

    select 


    FOR i IN 1..rows_quantity LOOP 
     DBMS_OUTPUT.PUT_LINE('#### ROW 1 ####'); 

     FOR i IN 1..94 LOOP 

      END LOOP; 

     END LOOP; 
    end; 

私はテーブルの正確な(x、y)から列の量と値を取得する方法がわかりません。

親切に私を助けてくれますか?ありがとうございました。

私はOracle SQL環境を使用していることを忘れてしまいます。

答えて

2

まず第一に、これは、PL/SQLとの共通点は何もありません:

for row in row_count 
    for column in column_count 
     insert into table2 at (x,y) value from (row,column) 
     column++ 
    end 
row++ 
end 

は、ドキュメントhereを参照してください。別のテーブルからすべての行をコピーするには

insert into table2 (x,y) 
select a, b 
    from table1; 

それは、単純なSQLクエリで、それがあるとして、またはPL/SQLプロシージャ内で使用することができます。

テーブルのすべての行を繰り返し処理する方法はたくさんあります。最もシンプル:

for i in (select column1, column2, ... from table1) loop 
    dbms_output.put_line(i.column1); 
end loop; 

もう一つの方法:テーブルの行数をカウントするには、動的SQLとDBMS_SQLパッケージ

を使用したコレクション

  • を使用して、カーソル
  • を使用して

    1. 、あなたSQLクエリを使用できます:

      select count(*) 
          from table1 
      

      またはほぼ同じPL/SQLコード(あなたはexecute immediateを使用する必要はありません):

      declare 
          total number; 
      begin 
      select count(*) 
          into total 
          from table1; 
          dbms_output.put_line('count of rows: ' || total); 
      end; 
      /
      

      しかし、どのような場合には、テーブルに含まれる行数と列、知っている必要はありませんそれらを反復する。フィルタリングする方法だけを知っていて、反復したいものはどれだけ必要です。

  • 関連する問題