遍历表PL / SQL中的所有行

时间:2016-12-08 20:22:05

标签: oracle plsql

从table1我想收集某些列的值。首先,我试图将一张桌子复制到另一张桌子,但在尝试时我卡住了:

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环境。

1 个答案:

答案 0 :(得分: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;

另一种方式:

  1. 使用游标
  2. 使用馆藏
  3. 使用动态SQL和dbms_sql包
  4. 要计算表中的行,可以使用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;
    /
    

    但无论如何,您不需要知道表中包含多少行和列,以迭代它们。您只需知道,如何过滤,您想要迭代哪些。