- 论坛徽章:
- 0
|
存储过程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
我刚接触数据库,啥都不会呢,求指点~~ |
|