这是工作首次使用ORACLE 存储过程现在情况是这样的:有很多基础表,现在要根据客户需求从这些基础表中分别取不同的字段来拼成一个客户需要的大表,也就是比如A表,我取A1,A5,A8,A9,A12字段,存为AA表,B表我取B1,B3,B9,B18,B22字段,存为BB表,C表我取C12,C33,C55,C66,C22字段,存为CC表,还有很多。存储过程如何写,因为要用到很多临时表,望高手给段 code 参考参考,谢谢 万分感谢我是不是要在存储过程中把这些要取的字段先生成一张表比如,AA,BB,CC,然后再把数据取出来放到AA,BB,CC里,在通过条件勾到一起去。还有可不可以通过临时表来实现,因为有很多表要选出一部分数据来构成一张大表的,大概十五六个吧,有什么比较通用的方法吗还有在存储过程中动态建的表,在数据库中是不是要事先存在,能不能 不建表结构而直接用 insert into mytable1(select a,b,c,d,e,f from mytable2) 的方式向表mytable1中查数据
sql 2005 有 select a,b,c,d into #temp_table from mytable2 的方法,oracle 有没不带参数的存储过程 在调用的时候 exec proc1() 括号 还要吗 谢谢 

解决方案 »

  1.   

    create or replace procedure proc
    is
    begin
       execute immediate 'create table aa as select a1,a5,a8,a9,a12 from a';
       commit;
       execute immediate 'create table bb as select b1,b3,b9,b18,b22 from b';
       commit;
       execute immediate 'create table final as select c1,c2,c3 from aa,bb where ...';
       commit;
       execute immediate 'drop table aa';
       execute immediate 'drop table bb';
       commit;
    exception
       when others then
          raise;
    end proc;
    /
    动态建的表不需要事先存在,
    不带参数的存储过程 在调用的时候 exec proc1;
    在PROCEDURE中
    create procedure proc2
    id
    begin
       proc1;
    end proc2;
      

  2.   

    create table table1 as select .. from table2
    比sqlserver好
      

  3.   


    [1]  存储过程如何写,这里很难讲清楚了,主要是要了解plsql的一些概念和语法,很多地方和tsql一致,不过有一些地方和tsql有区别
    可以见贴
    "plsql与tsql的语法不同"  http://bbs.inthirties.com/viewthread.jsp?tid=10&extra=page%3D1
    "plsql和tsql常用函数比对"  http://bbs.inthirties.com/viewthread.jsp?tid=9&extra=page%3D1 [2]存储过程中动态建的表,在数据库中是不是要事先存在建临时表,预先建立好。临时表有session级别和transaction级别
    详见
    http://blog.csdn.net/inthirties/archive/2009/08/06/4420030.aspx
    [3]sql 2005 有 select a,b,c,d into #temp_table from mytable2 的方法,oracle 有没 
    oracle有这样的用法,不过方式不一样,如下是oracle的用法
    insert into temp_table  select a,b,c,d i from mytable2[4] 不带参数的存储过程 在调用的时候 exec proc1()
    不需要