***** SQL SERVER
if not exists(select * from sysobjects where name='kliu')
create table kliu (
  kllo char(10) null default '',
  klkl char(10) null default '',
  h char(10) null default '',
  g char(10) null default ''
);就是为了实现在SQL SERVER里面这样的功能 ***** ORACLEDECLARE
  xcount  INTEGER;
BEGIN
  SELECT COUNT(*) INTO xcount FROM SYS.ALL_TABLES WHERE TABLE_NAME='TBL_AIDENUM';
  IF xcount=0 THEN
    BEGIN
      -- Create脚本有错
      CREATE TABLE "SYSTEM"."TBL_AIDENUM"
      ( 
        "CHINNUM"  VARCHAR2(2)    NOT NULL,
        "FULLNUM"  VARCHAR2(10)    NULL,
        "AIDENUM"  VARCHAR2(2)    NULL
      )
      TABLESPACE "SYSTEM";
      -- Insert脚本没错
      -- INSERT INTO SYSTEM.TBL_AIDENUM VALUES('cc','xdd','c');
    END;
  END IF;
END; 为什么总是有错?
请问你们有没有更好的办法?先谢谢了哈

解决方案 »

  1.   

    EXECUTE IMMEDIATE 'CREATE TABLE "SYSTEM"."TBL_AIDENUM"
          ( 
            "CHINNUM"  VARCHAR2(2)    NOT NULL,
            "FULLNUM"  VARCHAR2(10)    NULL,
            "AIDENUM"  VARCHAR2(2)    NULL
          )
          TABLESPACE "SYSTEM";'
      

  2.   

    EXECUTE IMMEDIATE 'CREATE TABLE "SYSTEM"."TBL_AIDENUM"
          ( 
            "CHINNUM"  VARCHAR2(2)    NOT NULL,
            "FULLNUM"  VARCHAR2(10)    NULL,
            "AIDENUM"  VARCHAR2(2)    NULL
          )
          TABLESPACE "SYSTEM";'
    -------------------------------
    正解
      

  3.   

    很奇怪你为什么要把表建在系统用户上.--------- 如果是普通用户,拥有CREATE权限
    --------- ORACLEDECLARE
      xcount  INTEGER;
    BEGIN
      select count(*) into xcount
        from user_all_tables 
       where table_name = 'TBL_AIDENUM';
      
      IF xcount=0 THEN
        BEGIN
          -- Create脚本有错
          CREATE TABLE TBL_AIDENUM
          ( 
            CHINNUM  VARCHAR2(2)    NOT NULL,
            FULLNUM  VARCHAR2(10)    NULL,
            AIDENUM  VARCHAR2(2)    NULL
          )
          
        END;
      END IF;
    END; 
      

  4.   

    纠正下:TABLESPACE "SYSTEM"';                  :)
      

  5.   

    谢谢各位
    libin_ftsafe(子陌红尘:当libin告别ftsafe) 说的在ORACLE查询分析器里可以了哈
    但是我在delphi里用ODAC的ORAQuery来执行就有错,是不是要把这个脚本也要弄成过程来执行呢?
      

  6.   

    sanoul(垃圾) 我用自己的用户但是有一些问题,所以就用的系统用户
    请问你有什么好的方法?
      

  7.   

    sanoul(垃圾)  
     
       是不是权限问题啊
    ----------------------------------
    PL/SQL中是不可执行DDL语句的 ,只能用 execute immediate or dbms_sql
      
     
      

  8.   

    在登录,还有执行一些操作的时候有问题下面是我创建的用户和所赋的权限:CREATE USER "ERPUSER"  PROFILE "DEFAULT" 
        IDENTIFIED BY "ERPUSER" DEFAULT TABLESPACE "TBL_ERP" 
        TEMPORARY TABLESPACE "TBL_TEMP" 
        ACCOUNT UNLOCK;
    GRANT UNLIMITED TABLESPACE TO "ERPUSER" WITH ADMIN OPTION;
    GRANT "CONNECT" TO "ERPUSER" WITH ADMIN OPTION;
    GRANT "DBA" TO "ERPUSER" WITH ADMIN OPTION;
    GRANT "RESOURCE" TO "ERPUSER" WITH ADMIN OPTION;
      

  9.   

    执行SQL脚本的已搞定请问我上面创建的用户和所赋的权限的有什么问题吗?完了就结帖,分不够可以再加
      

  10.   

    ORACLE过程里执行DDL,需要用动态SQL
      

  11.   

    DECLARE
      xcount  INTEGER:=0;
    BEGIN
      SELECT COUNT(*) INTO xcount FROM ALL_TABLES WHERE TABLE_NAME='TBL_AIDENUM';
      DBMS_OUTPUT.PUT_LINE(xcount);
      IF xcount=1 THEN
        BEGIN
          -- Create脚本有错
          EXECUTE IMMEDIATE 'CREATE TABLE "SYSTEM"."TBL_AIDENUMq"
          ( 
            "CHINNUM"  VARCHAR2(2)    NOT NULL,
            "FULLNUM"  VARCHAR2(10)    NULL,
            "AIDENUM"  VARCHAR2(2)    NULL
          )
          TABLESPACE "SYSTEM"';
        END;
      END IF;
    END; 我用的ODAC执行的这个,可以执行哈谢谢各位吃了饭了结帖