查看: 10888|回复: 10

表名做变量的存储过程怎么弄啊?

[复制链接]
论坛徽章:
57
生肖徽章:鸡
日期:2007-01-25 16:51:36生肖徽章2007版:兔
日期:2009-05-22 17:40:35生肖徽章2007版:鼠
日期:2009-05-26 08:52:09生肖徽章2007版:猴
日期:2009-06-15 10:22:54生肖徽章2007版:龙
日期:2009-06-16 16:00:132010广州亚运会纪念徽章:乒乓球
日期:2010-11-22 15:42:522010广州亚运会纪念徽章:现代五项
日期:2010-12-06 11:00:362010广州亚运会纪念徽章:垒球
日期:2010-12-06 11:02:182010广州亚运会纪念徽章:乒乓球
日期:2011-04-07 14:48:342011新春纪念徽章
日期:2011-04-15 18:07:34
跳转到指定楼层
1#
发表于 2005-4-29 17:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是创建存储过程的脚本
create or replace procedure p_table
(
p_tname in varchar2
)
as
begin
select * from p_tname;
end;
/

编译不通过,提示错误
8/3 PL/SQL: SQL Statement ignored
8/17 PL/SQL: ORA-00942: 表或视图不存在

怎么回事呢?
招聘 : 数据库管理员
论坛徽章:
87
生肖徽章2007版:虎
日期:2009-03-02 15:42:532011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-02-18 11:43:32数据库板块每日发贴之星
日期:2011-04-05 01:01:01现任管理团队成员
日期:2011-05-07 01:45:08鲜花蛋
日期:2011-06-26 11:15:422011新春纪念徽章
日期:2011-01-25 15:41:01
2#
发表于 2005-4-29 17:25 | 只看该作者

Re: 表名做变量的存储过程怎么弄啊?

最初由 xiaokelz 发布
[B]下面是创建存储过程的脚本
create or replace procedure p_table
(
p_tname in varchar2
)
as
begin
select * from p_tname;
end;
/

编译不通过,提示错误
8/3 PL/SQL: SQL Statement ignored
8/17 PL/SQL: ORA-00942: 表或视图不存在

怎么回事呢? [/B]


  • 存储过程中,选定结果得放入变量中。
  • 将你的传入表名组成一个完整的查询,用execute immedate 执行。如:execute immediate 'delete from p_tname where rownum=1';
  • 使用游标.

使用道具 举报

回复
论坛徽章:
53
ITPUB元老
日期:2007-05-26 17:20:07雪佛兰
日期:2013-11-09 14:27:29Jeep
日期:2013-11-11 12:36:42大众
日期:2014-01-07 13:55:32凯迪拉克
日期:2014-01-21 10:40:32兰博基尼
日期:2014-01-21 14:23:55雪佛兰
日期:2014-02-08 08:40:412014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-20 16:11:47
3#
发表于 2005-4-29 17:25 | 只看该作者
用dbms_sql包

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
87
生肖徽章2007版:虎
日期:2009-03-02 15:42:532011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-02-18 11:43:32数据库板块每日发贴之星
日期:2011-04-05 01:01:01现任管理团队成员
日期:2011-05-07 01:45:08鲜花蛋
日期:2011-06-26 11:15:422011新春纪念徽章
日期:2011-01-25 15:41:01
4#
发表于 2005-4-29 17:27 | 只看该作者
最初由 rolleaway 发布
[B]用dbms_sql包 [/B]


如果是9i了,还这么提倡,抗议!

9i中使用execute immediate ,简单、高效。

使用道具 举报

回复
论坛徽章:
57
生肖徽章:鸡
日期:2007-01-25 16:51:36生肖徽章2007版:兔
日期:2009-05-22 17:40:35生肖徽章2007版:鼠
日期:2009-05-26 08:52:09生肖徽章2007版:猴
日期:2009-06-15 10:22:54生肖徽章2007版:龙
日期:2009-06-16 16:00:132010广州亚运会纪念徽章:乒乓球
日期:2010-11-22 15:42:522010广州亚运会纪念徽章:现代五项
日期:2010-12-06 11:00:362010广州亚运会纪念徽章:垒球
日期:2010-12-06 11:02:182010广州亚运会纪念徽章:乒乓球
日期:2011-04-07 14:48:342011新春纪念徽章
日期:2011-04-15 18:07:34
5#
 楼主| 发表于 2005-4-29 17:37 | 只看该作者

Re: Re: 表名做变量的存储过程怎么弄啊?

最初由 chensq 发布
[B]

  • 存储过程中,选定结果得放入变量中。
  • 将你的传入表名组成一个完整的查询,用execute immedate 执行。如:execute immediate 'delete from p_tname where rownum=1';
  • 使用游标.
[/B]


1 ?
2、3、因为是只传一个表名,所以没用到游标也是可以的吧?

用第二条改了一下存储过程,到是可以编译通过了,但是,可惜还是无法执行的。

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
87
生肖徽章2007版:虎
日期:2009-03-02 15:42:532011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-02-18 11:43:32数据库板块每日发贴之星
日期:2011-04-05 01:01:01现任管理团队成员
日期:2011-05-07 01:45:08鲜花蛋
日期:2011-06-26 11:15:422011新春纪念徽章
日期:2011-01-25 15:41:01
6#
发表于 2005-4-29 17:43 | 只看该作者

Re: Re: Re: 表名做变量的存储过程怎么弄啊?

最初由 xiaokelz 发布
[B]

1 ?
2、3、因为是只传一个表名,所以没用到游标也是可以的吧?

用第二条改了一下存储过程,到是可以编译通过了,但是,可惜还是无法执行的。 [/B]


没法执行?
[php]
declare
           cnt  integer;
begin
          select count(*) into cnt from t_name;
          for i  in 1..cnt
               loop
               p_table(t_name);
               end loop;
          commit;
end;
.[/php]

完成后再看一下,你的t_name表,还有没有数据???

使用道具 举报

回复
论坛徽章:
117
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主7段
日期:2012-05-15 15:24:11ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32紫蛋头
日期:2013-03-04 17:00:07优秀写手
日期:2013-12-18 09:29:09
7#
发表于 2005-4-29 17:48 | 只看该作者

使用道具 举报

回复
论坛徽章:
57
生肖徽章:鸡
日期:2007-01-25 16:51:36生肖徽章2007版:兔
日期:2009-05-22 17:40:35生肖徽章2007版:鼠
日期:2009-05-26 08:52:09生肖徽章2007版:猴
日期:2009-06-15 10:22:54生肖徽章2007版:龙
日期:2009-06-16 16:00:132010广州亚运会纪念徽章:乒乓球
日期:2010-11-22 15:42:522010广州亚运会纪念徽章:现代五项
日期:2010-12-06 11:00:362010广州亚运会纪念徽章:垒球
日期:2010-12-06 11:02:182010广州亚运会纪念徽章:乒乓球
日期:2011-04-07 14:48:342011新春纪念徽章
日期:2011-04-15 18:07:34
8#
 楼主| 发表于 2005-4-29 18:03 | 只看该作者
to chensq
我用的表有数据,是不是这样,我把你的那个代码中的t_name都改成我的表名,然后执行
看看
ORA-06550: 第 7 行, 第 24 列:
PLS-00357: 在此上下文中不允许表,视图或序列引用 'T_POINT'
ORA-06550: 第 7 行, 第 16 列:
PL/SQL: Statement ignored

使用道具 举报

回复
论坛徽章:
57
生肖徽章:鸡
日期:2007-01-25 16:51:36生肖徽章2007版:兔
日期:2009-05-22 17:40:35生肖徽章2007版:鼠
日期:2009-05-26 08:52:09生肖徽章2007版:猴
日期:2009-06-15 10:22:54生肖徽章2007版:龙
日期:2009-06-16 16:00:132010广州亚运会纪念徽章:乒乓球
日期:2010-11-22 15:42:522010广州亚运会纪念徽章:现代五项
日期:2010-12-06 11:00:362010广州亚运会纪念徽章:垒球
日期:2010-12-06 11:02:182010广州亚运会纪念徽章:乒乓球
日期:2011-04-07 14:48:342011新春纪念徽章
日期:2011-04-15 18:07:34
9#
 楼主| 发表于 2005-4-30 09:44 | 只看该作者
忘了说了,数据库版本oracle9.2.0.1

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:科特迪瓦
日期:2010-04-15 12:20:472010年世界杯参赛球队:智利
日期:2010-04-13 17:15:21生肖徽章2007版:蛇
日期:2009-09-24 13:54:11生肖徽章2007版:龙
日期:2009-09-22 13:56:012009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:龙
日期:2009-02-10 13:45:15生肖徽章2007版:狗
日期:2009-02-03 13:53:34会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
10#
发表于 2005-4-30 10:30 | 只看该作者
如果对参数中指定表的结构一无所知,而要想用这个过程输出表的数据时,DBMS_SQL是唯一的选择。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表