动态SQL语句
execute immediate('CREATE TABLE ALERT_LOG (CONTENT varchar2(5),remark 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 (remark,CONTENT))LOCATION(''relta.txt''))PARALLEL 5 REJECT LIMIT UNLIMITED;');
向各位求救,上面的语句错在哪里????该如何实现??
问题点数:100、回复次数:11Top
1 楼HAPPY_FROG(大盘回锅肉)回复于 2006-03-02 12:36:10 得分 0
remark VARCHAR2(2000)使用的是oracle的关键字,后边的东西都会作为标记了Top
2 楼qiaozhiwei(乔)回复于 2006-03-02 12:56:05 得分 0
如果不用动态sql,直接建表是否成功?Top
3 楼cenlmmx(学海无涯苦作舟)回复于 2006-03-02 13:12:34 得分 0
语法的问题最好是先用最简单的,可以添加复杂的,再可行,再增加,一点一点的加,就好判断问题的出处,好过一大堆的代码放上来等着.Top
4 楼Relta(芯片)回复于 2006-03-02 13:30:44 得分 0
CREATE TABLE ALERT_LOG (CONTENT varchar2(5),remark 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 (remark,CONTENT))LOCATION('relta.txt'))PARALLEL 5 REJECT LIMIT UNLIMITED;
这一句直接执行是没有问题的..主要错误是出在 'relta.txt' 这里/Top
5 楼HAPPY_FROG(大盘回锅肉)回复于 2006-03-02 14:08:48 得分 0
CREATE TABLE ALERT_LOG
(CONTENT varchar2(5),remarkp 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 (remark,CONTENT))
LOCATION('a'))--PARALLEL 5
REJECT LIMIT UNLIMITED
create directory ALERT_DIR as '/home/oracle'
select * from alert_log
这是我根据你要求写的
你所连接的数据库服务器和你的机器是否在同一台机器上
directory应该和数据库服务器是同一台机器Top
6 楼Relta(芯片)回复于 2006-03-02 14:39:12 得分 0
directory 都是在同一机器上..
直接执行是没有问题的..就是动态执行时说语句错误Top
7 楼Relta(芯片)回复于 2006-03-03 09:41:44 得分 0
upTop
8 楼bobfang(匆匆过客)回复于 2006-03-03 10:13:51 得分 0
你是在PL/SQL中写的那句话吗?如果是,应该这样写
execute immediate('CREATE TABLE ALERT_LOG (CONTENT varchar2(5),remark 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 (remark,CONTENT))LOCATION(''relta.txt''))PARALLEL 5 REJECT LIMIT UNLIMITED');Top
9 楼Relta(芯片)回复于 2006-03-03 18:30:09 得分 0
我也是这样想,静态中的单引号,应该改为双单引号,可就是不可以..
提示的是无效sql语句Top
10 楼Hangfeng(寒风)回复于 2006-03-04 17:28:49 得分 0
使用动态语句时,执行语句不用分号作结束符。
把分号去掉试试。
execute immediate('CREATE TABLE ALERT_LOG (CONTENT varchar2(5),remark 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 (remark,CONTENT))LOCATION(''relta.txt''))PARALLEL 5 REJECT LIMIT UNLIMITED');Top
11 楼s198127(xyz)回复于 2006-03-07 17:50:26 得分 0
Execute Immediate
后面直接跟字符串操作语句,不用加'('
你也可以将你的语句放入一个字符串中在添加到
Execute Immediate 之后;
execute immediate 'CREATE .......';
或者
Sqlstr := 'CREATE .......';
Execute Immediate Sqlstr;Top




