最近我再开发过程中遇到了这样一个问题请教高手指教!
开发平台:windows server 2003 + .net 2005 + oracle 10g
需要实现的目的是:在.net 环境下从 oracle 中提取数据集返回到.net 页面中。
oracle 的存储过程建立和 SQL server 的建立有很大的差异化。而且在临时表的创建上也不同。
请教高手在 oracle 中是不是需要创建程序包来完成临时表的创建?

解决方案 »

  1.   

    我帮你找了个例子,你自己看下,要是再不明白,再问吧。
    CREATE OR REPLACE procedure create_temp_table(i_username in table1.username%type) is
    v_id number;
    v_string varchar2(200);
    v_num number;
    beginv_id:=dbms_sql.open_cursor;
    v_string:='create global temporary table ta(code number primary key not null,username varchar2(20),starttime date,endtime date)';
    dbms_sql.parse(v_id,v_string,dbms_sql.v7);
    v_num:=dbms_sql.execute(v_id);
    dbms_sql.close_cursor(v_id);v_id:=dbms_sql.open_cursor;
    v_string:='insert into ta select * from table1 where username= :username';
    dbms_sql.parse(v_id,v_string,dbms_sql.v7);
    dbms_sql.bind_variable(v_id,':username',i_username);
    v_num:=dbms_sql.execute(v_id);
    dbms_sql.close_cursor(v_id);
    exception
    when others then
    v_id:=dbms_sql.open_cursor;
    v_string:='drop table ta';
    dbms_sql.parse(v_id,v_string,dbms_sql.v7);
    v_num:=dbms_sql.execute(v_id);
    dbms_sql.close_cursor(v_id);v_id:=dbms_sql.open_cursor;
    v_string:='create global temporary table ta(code number primary key not null,username varchar2(20),starttime date,endtime date)';
    dbms_sql.parse(v_id,v_string,dbms_sql.v7);
    v_num:=dbms_sql.execute(v_id);
    dbms_sql.close_cursor(v_id);v_id:=dbms_sql.open_cursor;
    v_string:='insert into ta select * from table1 where username= :username';
    dbms_sql.parse(v_id,v_string,dbms_sql.v7);
    dbms_sql.BIND_VARIABLE(v_id,':username',i_username);
    v_num:=dbms_sql.execute(v_id);
    dbms_sql.close_cursor(v_id);
    end;
    /  
      

  2.   

    临时表可以和普通的表一样预先创建,也可以在过程里动态创建。
    但Oracle的临时表和SQLServer的有很大的差异,分为事务级和Session级,具体的你可以Google一下。