解决创建动态表时的PL/SQL错误

日期: 2012-12-10 作者:Dan Clamage 来源:TechTarget中国 英文

问:我的PL/SQL代码如下所示,其中提示“insert”出现问题。我检查了一下还是不知道问题出在哪里,请专家帮忙指点一下,谢谢! insert into row_chain_demo (col1,col256) values(1,’Hello World’);             * ERROR at line 43: ORA-06550: line&nbs……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

问:我的PL/SQL代码如下所示,其中提示“insert”出现问题。我检查了一下还是不知道问题出在哪里,请专家帮忙指点一下,谢谢!

insert into row_chain_demo (col1,col256) values(1,'Hello World');
            *
ERROR at line 43:
ORA-06550: line 43, column 13:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 43, column 1:
PL/SQL: SQL Statement ignored

declare
l_create_table_query varchar2(2000) default 'create table row_chain_demo (col1 number) segment creation immediate' ; l_alter_table_query  varchar2(2000) ; l_column_name user_tab_columns.column_name%type default 'col' ;

begin
for x in (select *
            from dual
            where not exists (select null
                                from user_tables

                                where table_name = upper('row_chain_demo') ) ) loop
  execute immediate l_create_table_query; end loop;
dbms_output.put_line (l_create_table_query);
for l_cntr in 2..256
loop
  l_column_name       := 'col' || l_cntr ;
  l_alter_table_query := 'alter table row_chain_demo add  ' || l_column_name || ' char(2000) ' ;

  for x in (select *
                from dual
                where not exists (select null
                                    from user_tab_columns
                                    where table_name = upper('row_chain_demo')
                                    and column_name = upper( l_column_name )
                                 )
            )
  loop
    execute immediate l_alter_table_query ;
  end loop;
end loop;
commit;
insert into row_chain_demo (col1,col256) values(1,'Hello World');
end;
/

  答:你创建的表不会动态地出现在编译时(compile time)里。任何模式对象的静态引用都需要在编译时中进行验证。而DML中动态表的静态引用语句必须是动态进行的。

相关推荐