动态SQL语句

Relta 2006-03-02 12:17:52
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;');

向各位求救,上面的语句错在哪里????该如何实现??
...全文
255 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
s198127 2006-03-07
  • 打赏
  • 举报
回复
Execute Immediate
后面直接跟字符串操作语句,不用加'('
你也可以将你的语句放入一个字符串中在添加到
Execute Immediate 之后;

execute immediate 'CREATE .......';
或者
Sqlstr := 'CREATE .......';
Execute Immediate Sqlstr;
Hangfeng 2006-03-04
  • 打赏
  • 举报
回复
使用动态语句时,执行语句不用分号作结束符。
把分号去掉试试。
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');
bobfang 2006-03-03
  • 打赏
  • 举报
回复
你是在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');
Relta 2006-03-03
  • 打赏
  • 举报
回复
up
Relta 2006-03-03
  • 打赏
  • 举报
回复
我也是这样想,静态中的单引号,应该改为双单引号,可就是不可以..
提示的是无效sql语句
qiaozhiwei 2006-03-02
  • 打赏
  • 举报
回复
如果不用动态sql,直接建表是否成功?
HAPPY_FROG 2006-03-02
  • 打赏
  • 举报
回复
remark VARCHAR2(2000)使用的是oracle的关键字,后边的东西都会作为标记了
Relta 2006-03-02
  • 打赏
  • 举报
回复
directory 都是在同一机器上..
直接执行是没有问题的..就是动态执行时说语句错误
HAPPY_FROG 2006-03-02
  • 打赏
  • 举报
回复
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应该和数据库服务器是同一台机器
Relta 2006-03-02
  • 打赏
  • 举报
回复
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' 这里/
cenlmmx 2006-03-02
  • 打赏
  • 举报
回复
语法的问题最好是先用最简单的,可以添加复杂的,再可行,再增加,一点一点的加,就好判断问题的出处,好过一大堆的代码放上来等着.

3,492

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧