execute immediate('CREATE TABLE ALERT_LOG (CONTENT varchar2(5),re VARCHAR2(2000) )ORGANIZATION EXTERNAL( TYPE ORACLE_LOADER DEFAULT DIRECTORY ALERT_DIR ACCESS PARAMETERS( RECORDS DELIMITED BY NEWLINE NOBADFILE NOLOGFILE NODISCARDFILE FIELDS TERMINATED BY '','' MISSING FIELD VALUES ARE NULL (re,CONTENT))LOCATION(''relta.txt''))PARALLEL 5 REJECT LIMIT UNLIMITED;');向各位求救,上面的语句错在哪里????该如何实现??

解决方案 »

  1.   

    re VARCHAR2(2000)使用的是oracle的关键字,后边的东西都会作为标记了
      

  2.   

    如果不用动态sql,直接建表是否成功?
      

  3.   

    CREATE TABLE ALERT_LOG (CONTENT varchar2(5),re VARCHAR2(2000) )ORGANIZATION EXTERNAL( TYPE ORACLE_LOADER DEFAULT DIRECTORY ALERT_DIR ACCESS PARAMETERS( RECORDS DELIMITED BY NEWLINE NOBADFILE NOLOGFILE NODISCARDFILE FIELDS TERMINATED BY ',' MISSING FIELD VALUES ARE NULL (re,CONTENT))LOCATION('relta.txt'))PARALLEL 5 REJECT LIMIT UNLIMITED;
    这一句直接执行是没有问题的..主要错误是出在 'relta.txt' 这里/
      

  4.   

    CREATE TABLE ALERT_LOG
     (CONTENT varchar2(5),rep VARCHAR2(2000) )
     ORGANIZATION EXTERNAL(
      TYPE ORACLE_LOADER 
      DEFAULT DIRECTORY ALERT_DIR 
      ACCESS PARAMETERS(
      --RECORDS DELIMITED BY NEWLINE 
      --NOBADFILE NOLOGFILE NODISCARDFILE 
      FIELDS TERMINATED BY ',') --MISSING FIELD VALUES ARE NULL (re,CONTENT))
      LOCATION('a'))--PARALLEL 5 
      REJECT LIMIT UNLIMITED
      
      create directory ALERT_DIR as '/home/oracle'
     select * from alert_log
    这是我根据你要求写的
    你所连接的数据库服务器和你的机器是否在同一台机器上
    directory应该和数据库服务器是同一台机器
      

  5.   

    directory 都是在同一机器上..
    直接执行是没有问题的..就是动态执行时说语句错误
      

  6.   

    你是在PL/SQL中写的那句话吗?如果是,应该这样写
    execute immediate('CREATE TABLE ALERT_LOG (CONTENT varchar2(5),re VARCHAR2(2000) )ORGANIZATION EXTERNAL( TYPE ORACLE_LOADER DEFAULT DIRECTORY ALERT_DIR ACCESS PARAMETERS( RECORDS DELIMITED BY NEWLINE NOBADFILE NOLOGFILE NODISCARDFILE FIELDS TERMINATED BY '','' MISSING FIELD VALUES ARE NULL (re,CONTENT))LOCATION(''relta.txt''))PARALLEL 5 REJECT LIMIT UNLIMITED');
      

  7.   

    我也是这样想,静态中的单引号,应该改为双单引号,可就是不可以..
    提示的是无效sql语句
      

  8.   

    使用动态语句时,执行语句不用分号作结束符。
    把分号去掉试试。
    execute immediate('CREATE TABLE ALERT_LOG (CONTENT varchar2(5),re VARCHAR2(2000) )ORGANIZATION EXTERNAL( TYPE ORACLE_LOADER DEFAULT DIRECTORY ALERT_DIR ACCESS PARAMETERS( RECORDS DELIMITED BY NEWLINE NOBADFILE NOLOGFILE NODISCARDFILE FIELDS TERMINATED BY '','' MISSING FIELD VALUES ARE NULL (re,CONTENT))LOCATION(''relta.txt''))PARALLEL 5 REJECT LIMIT UNLIMITED');
      

  9.   

    Execute Immediate 
    后面直接跟字符串操作语句,不用加'('
    你也可以将你的语句放入一个字符串中在添加到
    Execute Immediate 之后;execute immediate 'CREATE .......';
    或者
    Sqlstr := 'CREATE .......';
    Execute Immediate Sqlstr;