oracle8存储过程中如何创建表,或传入表名作为变量?(急)(200分)

  • 主题发起人 主题发起人 Walone
  • 开始时间 开始时间
W

Walone

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在同一个存储过程中,对不同的表进行操作,传入表名也好,新建表也好,
请问各位大侠有何高招??
急用,谢谢
 
oracle8中有的动态的PL/SQL语句,可以创建不同的表和对不同的表进行操作。
具体参见动态PL/SQL介绍。
 
create proc p_TableName
(@TableName varchar(30))
as
declare @strSQL varchar(300)

set @strSQL =
'select *
from ' + @TableName

exec @strSQL
 
我只能用这笨方法。因为当参数多时就觉得用 @strSQL 很别扭。

我正想问这个问题的更好的解法,望大虾们多多指点。
 
差点忘了声明,我这是在 SQL Sever 下用的,希望不会有差别
 
上面的命令oracle怕是不行

oracle中可以用 DBMS_SQL 包来执行动态sql命令
 
必须用动态SQL.

create procedure myproc(in tablename varchar2(30))
as
declare
CURSOR_NAME INTEGER;
tmpSQL varchar2(300);
begin
tmpSQL:='CREATE TABLE TEST ....';
CURSOR_NAME:=SYS.DBMS_SQL.OPEN_CURSOR;
SYS.DBMS_SQL.PARSE(CURSOR_NAME,TMPSQL,SYS.DBMS_SQL.V7);
SYS.DBMS_SQL.EXECUTE(CURSOR_NAME);
SYS.DBMS_SQL.CLOSE_CURSOR(CURSOR_NAME);
end;

最好将TMPSQL也作为参数
 
正如jqw所讲,要用动态sql来写


这两天在用动态sql写存储过程,因为,我临要在过程中建临时表。
用到cursor时有点问题。
记得静态sql中,在定义了cursor for update之后,
可以用where current of 去更新。
但是,在动态sql中,open 出来的cursor,
再在loop里,用where current of 语句,不认这样的cursor
想写成sql字符串,用dbms_sql.parse()来做,
然后把cursor变量用已打开的cursor代换
如:
v_sqlstr:='update tab_pd set hipdbh =hipdbh+1
where current of :v_cur';
dbms_sql.parse(v_cur2,v_sqlstr,dbms_sql.v7);
dbms_sql.bind_variable(v_cur2,':cur',v_cur);

其中,cursor是先用dbms_sql.open_cursor打开的,
后又用 动态sql语句做了select,

错误提示:
ORA-00936: 缺少表达式
ORA-06512: 在"SYS.DBMS_SYS_SQL", line 491
ORA-06512: 在"SYS.DBMS_SQL", line 32

不明所以,请高人指点,如何更新用动态sql查找出来的记录集。

 
附加功能 将问题提前
 
Walone:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。
 
拖了这么久了,结束算了
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部