有很多表
table1
id  month   fee   
 1  201207   12
 1  201207   -6
table2
id  month   fee
2   201207   3
2   201207   -2
table3
id  month   fee
3    201207  4
3    201207  -1
  .
  .
  .
  .
比如说有五个表  如何用循环语句编写fee<0的记录保存到临时表中
各位大侠 帮忙解决下吧 谢谢

解决方案 »

  1.   


    --用到循环?
    create global temporary table tmp_test as
    select id,month,fee from table1 where fee<0
    union all select id,month,fee from table2 where fee<0
    union all select id,month,fee from table3 where fee<0
    union all select id,month,fee from table4 where fee<0
    union all select id,month,fee from table5 where fee<0;
      

  2.   

    --这个例子是三个表的,改动一下参数就行---
    CREATE TABLE fee1(ID NUMBER ,months VARCHAR2(20),fee NUMBER);
    CREATE TABLE fee2(ID NUMBER ,months VARCHAR2(20),fee NUMBER);
    CREATE TABLE fee3(ID NUMBER ,months VARCHAR2(20),fee NUMBER);INSERT INTO fee1 VALUES(1,'201207',12);
    INSERT INTO fee1 VALUES(1,'201207',-6);
    INSERT INTO fee2 VALUES(2,'201207',3);
    INSERT INTO fee2 VALUES(2,'201207',-2);
    INSERT INTO fee3 VALUES(3,'201207',4);
    INSERT INTO fee3 VALUES(3,'201207',-1);
    COMMIT;CREATE TABLE fee_temp(ID NUMBER ,months VARCHAR2(20),fee NUMBER);
    DECLARE
      v_Sql VARCHAR2(1000);
    BEGIN
      v_Sql := 'INSERT INTO fee_temp SELECT * FROM fee';
      FOR i IN 1 .. 3 LOOP
        v_Sql := v_Sql || i || ' where fee<0';
        EXECUTE IMMEDIATE v_Sql;
        v_Sql := 'INSERT INTO fee_temp SELECT * FROM fee';
      END LOOP;
    END;
      

  3.   

    如果表名不是规则的呢 比如说是fee1 fee5 fee9......
      

  4.   

    在三樓的基礎上稍改下不就好了--v_cur你看下你的表屬於什麼倏件,加入一次性取出就可以了
    declare 
    v_sql varchar(4000);
    cursor v_cur is select table_name from user_tables where table_name like 'FEE%'; 
    begin
    for v in v_cur
    loop
    v_sql := 'insert into fee_temp select * from '||v.table_name||' where fee<0';
    execute immediate v_sql;
    end loop;
    commit;
    end;
    /