100分相送!在线等待!

zgysc 2003-09-29 04:23:56
我写个过程如下:
create or replace procedure aa
as
talename varchar2(100);
tempid number;
begin
tablename :='table1';
select id from tablename into tempid;
insert into table2(vv) values(tempid);
commit;
end;
但始终报错:系统没根本没有tablename这个表,要是把 select id from tablename into tempid;里的tablename 换成 table1 才能执行

也就是说用变量根本代替不了表名,我怎么样才能实现用变量替代表名呢?
...全文
49 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
beckhambobo 2003-09-29
  • 打赏
  • 举报
回复
create or replace procedure aa
as
talename varchar2(100);
tempid number;
str varchar2(50);
begin
tablename :='table1';
str:='select id from '||tablename;
execute immediate str into tempid;
insert into table2(vv) values(tempid);
exception
when others then
dbms_output.put_line('ddd');
commit;
end;
/
LGQDUCKY 2003-09-29
  • 打赏
  • 举报
回复
绑定变量,使用动态SQL
table_name := 'T' || LTRIM(TO_CHAR(my_bbh, v_format ));
sqlcmd := 'SELECT COUNT(*) FROM tabs WHERE TABLE_NAME=:TBNAME';
DBMS_SQL.PARSE( nSQL, sqlcmd, DBMS_SQL.v7 ) ;
DBMS_SQL.BIND_VARIABLE( nSQL, ':TBNAME', table_name ) ;
DBMS_SQL.DEFINE_COLUMN( nSQL, 1, my_count ) ;
ret := DBMS_SQL.EXECUTE( nSQL )
Lastdrop 2003-09-29
  • 打赏
  • 举报
回复
不行,你必须用动态SQL,才可以用变量当表名。
zgysc 2003-09-29
  • 打赏
  • 举报
回复
谢谢二位,不过我知道EXECUTE IMMEDIATE ,我现在只想有个函数什么的能把字符串转为表对象
jiezhi 2003-09-29
  • 打赏
  • 举报
回复
下面是我以前寫的過程里面的一段:
str1:='';
str2:='';
OPEN c_cur FOR SELECT tname FROM t_sjbgl;
LOOP
FETCH c_cur INTO v_tname;
EXIT WHEN c_cur%NOTFOUND;
IF v_tname='T_DYJCJL_SAME' THEN
str1:='delete from '||v_tname||' where dybh='||
'(select dybh from T_DYJBXXB_SAME where ygid='''||v_ygid||''')';
ELSIF v_tname='T_DNZWLL_SAME' THEN
str1:='delete from '||v_tname||' where dybh='||
'(select dybh from T_DYJBXXB_SAME where ygid='''||v_ygid||''')';
ELSIF v_tname='T_HTFJ_SAME' THEN
str1:='delete from '||v_tname||' where htbh='||
'(select htbh from T_YGHT_SAME where ygid='''||v_ygid||''')';
ELSIF v_tname='T_GZJSXGZXM_SAME' THEN
str1:='delete from '||v_tname||' where bh='||
'(select bh from T_GZJSXB_SAME where ygid='''||v_ygid||''')';
ELSE
str1:='delete from '||v_tname||' where ygid='''||v_ygid||'''';
END IF;
EXECUTE IMMEDIATE str1;
END LOOP;
jiezhi 2003-09-29
  • 打赏
  • 举报
回复
... from ||tablename|| ...

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧