免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11416 | 回复: 1
打印 上一主题 下一主题

[求助] [求助][急]oracle存储过程创建表 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-27 13:01 |只看该作者 |倒序浏览
存储过程table_init(param1_ varchar2)创建表名为param1_的表,代码如下
create or replace
procedure table_init(param1_ varchar2) authid current_user   as
t_name varchar2(100):=param1_;
begin
execute immediate
' create table ' || t_name || '
(
日期 date not null,
代码 varchar2(20) not null,
最新 number,
换手率 number,
总额 number,
今开 number,
最高 number,
最低 number,
市盈率 varchar2(20),
市销率 varchar2(20),
委买价 number,
委卖价 number,
内盘 number,
外盘 number,
均价 number,
委比 number,
委差 number,
成交笔数 number,
成交方向 varchar2(20),
市净率 number,
总市值 number,
流通市值 number

) '
;
end table_init;


该段代码在下列代码中测试通过
declare
xx varchar2(40);
begin
xx:='nihao';
table_init(xx);
table_init('zhongguo');
table_init('xiaopengyou');
end;

但是当我在一个游标控制的for循环中调用table_init()过程时出错,代码如下
declare
cursor stock is select * from "股票";
rec stock%rowtype;
tmp varchar2(100);
begin
for rec in stock loop
tmp:=rec."表名";
dbms_output.put_line(tmp);
table_init(tmp);
end loop;
end;

这是为什么捏~~

还有一个奇怪的问题,本来create_table()过程创建表时把日期设为主键,但是这样只能一段代码中创建一个表,也就是第一段测试代码也通过不了了,提示xxxx已被占用。。。

求问,我的需求是为"股票"表中每一个记录创建一个表,表名为该记录指定的varchar2
我刚接触数据库,啥都不会呢,求指点~~

论坛徽章:
0
2 [报告]
发表于 2013-07-28 15:32 |只看该作者
好开心,刚才把这个问题干掉啦~~,原来是某个字段里含有特殊字符。。。
经验再次告诉我遇到难题时先放一放,一天半日后回头再看八成都会柳暗花明又一村~~嘿嘿~~
thanks anyway
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP