最近我再开发过程中遇到了这样一个问题请教高手指教!
开发平台:windows server 2003 + .net 2005 + oracle 10g
需要实现的目的是:在.net 环境下从 oracle 中提取数据集返回到.net 页面中。
oracle 的存储过程建立和 SQL server 的建立有很大的差异化。而且在临时表的创建上也不同。
请教高手在 oracle 中是不是需要创建程序包来完成临时表的创建?
开发平台:windows server 2003 + .net 2005 + oracle 10g
需要实现的目的是:在.net 环境下从 oracle 中提取数据集返回到.net 页面中。
oracle 的存储过程建立和 SQL server 的建立有很大的差异化。而且在临时表的创建上也不同。
请教高手在 oracle 中是不是需要创建程序包来完成临时表的创建?
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;
/
但Oracle的临时表和SQLServer的有很大的差异,分为事务级和Session级,具体的你可以Google一下。