CREATE OR REPLACE PACKAGE BODY a1 IS
PROCEDURE run
IS
BEGIN
a;
b;
END run;
PROCEDURE a
IS
BEGIN
declare a number;
begin
   select count(1) into a from user_tables where table_name='A';
   if a>0 then
     dbms_output.put_line('表存在');
     else
       dbms_output.put_line('表不存在');
           execute IMMEDIATE
           'create table F_FINANCE_METRIC 
(  FINANCE_METRIC_ID    VARCHAR2(32)         not null,
   MONTH ID             VARCHAR2(6)          not null,
   COST_CENTER_ID       VARCHAR2(32)         not null,
   METRIC_VALUE         NUMBER(14,2),
   constraint PK_F_FINANCE_METRIC primary key (FINANCE_METRIC_ID, MONTH_ID, COST_CENTER_ID)
);
comment on table F_FINANCE_METRIC is
'sdf';
comment on column F_FINANCE_METRIC.FINANCE_METRIC_ID is
'sdf';
comment on column F_FINANCE_METRIC.MONTH_ID is
'sdfsdf';
comment on column F_FINANCE_METRIC.COST_CENTER_ID is
'fdd';
comment on column F_FINANCE_METRIC.METRIC_VALUE is
'sdsd'';end if;END;COMMIT;
END a;
PROCEDURE b
IS
BEGIN
declare a number;
begin
   select count(1) into a from user_tables where table_name='bb';   if a>0 then
     dbms_output.put_line('表存在');
     else
       dbms_output.put_line('表不存在');
           execute IMMEDIATE
            'CREATE TABLE "bb"
  (  "ID" VARCHAR2(10), "NAME" VARCHAR2(10)) ';       end if;     END;COMMIT;
END b;END a1;
执行时候  错误  不放在 存储过程里面执行就不报错PACKAGE BODY SYS.A1 编译错误错误:PLS-00103: 出现符号 "SDF"在需要下列之一时:
        * & = - + ; < / > at in is
          mod remainder not rem return returning <an exponent (**)>
          <> or != or ~= >= <= <> and or like like2 like4 likec between
          into using || multiset bulk member submultiset
行:27
文本:'sdf';

解决方案 »

  1.   

    应该是comment语句不能封装到包、存储过程、函数中吧!
      

  2.   

    comment不是能添加语句中的包括存储过程和触发器等。
      

  3.   


    comment  能用在 存储过程里面?
      

  4.   

    另外execute immediate只能执行一个逻辑单元,也就是一个begin end块,或者一个语句。
    你的要拆成n个execute immediate执行。如下
    declare
     a number;
    begin
       select count(1) into a from user_tables where table_name='A';
       if a>0 then
       dbms_output.put_line('aaa');
       else
       dbms_output.put_line('bbb');
       execute IMMEDIATE
       'create table F_FINANCE_METRIC  
    ( FINANCE_METRIC_ID VARCHAR2(32) not null,
       MONTH_ID VARCHAR2(6) not null,
       COST_CENTER_ID VARCHAR2(32) not null,
       METRIC_VALUE NUMBER(14,2),
       constraint PK_F_FINANCE_METRIC primary key (FINANCE_METRIC_ID, MONTH_ID, COST_CENTER_ID))';
    execute IMMEDIATE 'comment on table F_FINANCE_METRIC is''sdf''';
    execute IMMEDIATE 'comment on column F_FINANCE_METRIC.FINANCE_METRIC_ID is ''sdf''';
    execute IMMEDIATE 'comment on column F_FINANCE_METRIC.MONTH_ID is ''sdfsdf''';
    execute IMMEDIATE 'comment on column F_FINANCE_METRIC.COST_CENTER_ID is ''fdd''';
    execute IMMEDIATE 'comment on column F_FINANCE_METRIC.METRIC_VALUE is ''sdsd''';
    end if;
    END;
    /