原帖地址:http://topic.csdn.net/u/20090228/20/343699d3-89b8-476b-b529-317aa08df053.html?seed=416749060我在存储过程里面写 create table t1;怎么在plsql命令行里面执行通不过呢?
这是什么原理啊?希望管理板块的高淫指点迷津啊!
还有在plsql命令行里面如何执行存储过程呢?
这是什么原理啊?希望管理板块的高淫指点迷津啊!
还有在plsql命令行里面如何执行存储过程呢?
调试欢乐多
我看你那样的用意就象要用临时表,如果要用临时表,用下面语句:
create glogal temporary table 表名
as
select * from tb where ....
on commit delete rows
或者
create glogal temporary table 表名
as
select * from tb where ....
on commit preserve rows
begin
execute immediate 'create table test (id int )';
exception
when others then
dbms_output.put_line('error:' || sqlerrm);
end demo;
v_Sqlb VARCHAR2(200);
Cursor_create VARCHAR2(100);
Result NUMBER;
BEGIN
v_Sql := '
CREATE TABLE T1
(
A VARCHAR2(200)
)
';
cursor_create := dbms_sql.open_cursor;
DBMS_SQL.PARSE(cursor_create, v_SQL,dbms_sql.native);
Result := dbms_sql.EXECUTE(cursor_create);
DBMS_SQL.close_cursor(cursor_create);
END Test1;可以参考下,需要用动态游标来创建的。
这个应该是编译器本身就不允许你这么做,在动态SQL里面创建的表,其实刚开始编译器并不知道有这个表的,只有执行以后才会有这个表的,所以编译器在编译的时候检查insert into t1 values(3);这句会认为这个表是不存在的,所以报错.
其实已经有人给出解法了,把所有的语句都放在动态SQL里面就不会有问题.
个人理解,如有误请多包涵.
嗯,用动态SQL来做的吧!应该可以搞定,不过有点消耗资源啊!