我的本意是客户端在表plan中插入数据时,数据库这边通过用户插入的数据 作为一个新表的表名,也就是想动态的 创建一个新表。我的想法是 通过触发器调用一个存储过程,在存储过程中实现更新原表和创建新表的功能。但我现在碰到了一个问题,存储过程在创建新表 时编译出错,下面是我存储过程中的代码:
create or replace procedure (v_unit in newplan.unit % type,
v_year_quarter in newplan.year_quarter % type
)as
t_unit newplan.unit % type;
t_year_quarter newplan.year_quarter % type;
t_plan_table_id varchar2(50);
t_str varchar2(1000);
begin
if v_unit = '吐鲁番采油厂' then
t_unit := 'tulufan';
elsif v_unit = '温米采油厂' then
t_unit := 'wenmi';
end if;
t_year_quarter := v_year_quarter;
t_plan_table_id :=upper(t_unit)||'_'||t_year_quarter;
--t_plan_table_id :='abc'
UPDATE NEWPLAN
SET plan_table_id = t_plan_table_id;
t_str:='create table '|| t_plan_table_id ||'(
target_tag varchar2(20),
count_unit varchar2(10),
quarter number(1),
jun_plan number(10,2),
feb_plan number(10,2),
mar_paln number(10,2),)';
EXECUTE IMMEDIATE t_str;------------这里出错了 为什么呢?
end;
create or replace procedure (v_unit in newplan.unit % type,
v_year_quarter in newplan.year_quarter % type
)as
t_unit newplan.unit % type;
t_year_quarter newplan.year_quarter % type;
t_plan_table_id varchar2(50);
t_str varchar2(1000);
begin
if v_unit = '吐鲁番采油厂' then
t_unit := 'tulufan';
elsif v_unit = '温米采油厂' then
t_unit := 'wenmi';
end if;
t_year_quarter := v_year_quarter;
t_plan_table_id :=upper(t_unit)||'_'||t_year_quarter;
--t_plan_table_id :='abc'
UPDATE NEWPLAN
SET plan_table_id = t_plan_table_id;
t_str:='create table '|| t_plan_table_id ||'(
target_tag varchar2(20),
count_unit varchar2(10),
quarter number(1),
jun_plan number(10,2),
feb_plan number(10,2),
mar_paln number(10,2),)';
EXECUTE IMMEDIATE t_str;------------这里出错了 为什么呢?
end;
target_tag varchar2(20),
count_unit varchar2(10),
quarter number(1),
jun_plan number(10,2),
feb_plan number(10,2),
mar_paln number(10,2),)';看到没有,你最后多了一个逗号
sasacat(傻傻猫)
眼睛亮!!!!!!!!
我还有个问题 在对newplan进行insert插入的时候 怎么报触发器不能读 的错误啊
怎么回事呢?
我触发器里的代码是:
begin
pro_create_table(:new.unit,:new.year_quarter);
end;
在对newplan进行insert插入unit 和 year_quarter时候,报触发器不能读 的错误
怎么回事呢?
因为触发器的事务完整性不是程序控制回滚的,而是数据库控制的,如果进行了ddl操作,那么在回滚的时候不能完全的回滚