可选地由“””括起来的 sqlldr 错误
sqlldr error for optionally enclosed by '"'
我在 shell 脚本中有如下动态控制文件
`echo 'LOAD DATA' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'APPEND' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'INTO TABLE TJX_SCR_UPLOAD_HEADER' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'WHEN FILE_RECORD_DESCRIPTOR = ' \'FHEAD\' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'FIELDS TERMINATED BY ","' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'TRAILING NULLCOLS' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo '(' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'FILE_RECORD_DESCRIPTOR position(1),' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'LINE_NO FILLER,' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'SCHEDULE_NO ,' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'SCHEDULE_DATE_TIME date' \'YYYYMMDD\' ',' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'UPLD_TIME_STAMP sysdate,' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'SEQ_NO "' ${exec_seq} '",' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'FILENAME CONSTANT ' \'$FILENAME\' ',' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'STATUS CONSTANT "UPLOADED"' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo ')' >> $CTL_DIR/tjx_sc_req_upld.ctl`
使用上面的代码,当我在 fields terminated by
旁边添加 OPTIONALLY ENCLOSED BY '"'
时,shell 脚本也可以工作 fine.But,如下所示
echo 'FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' ' >> $CTL_DIR/tjx_sc_req_upld.ctl
我收到语法错误
./tjx_sc_req_upld.ksh: line 109: syntax error at line 216: `(`' unexpected
当我删除 optionally enclosed 时,我没有收到错误消息。
您最终得到了不匹配的引号。您需要进行一些转义才能获得文字单引号:
echo 'FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '\''"'\'' ' >> $CTL_DIR/tjx_sc_req_upld.ctl
您可以调换引号以使其不那么难看:
echo "FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' " >> $CTL_DIR/tjx_sc_req_upld.ctl
我在 shell 脚本中有如下动态控制文件
`echo 'LOAD DATA' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'APPEND' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'INTO TABLE TJX_SCR_UPLOAD_HEADER' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'WHEN FILE_RECORD_DESCRIPTOR = ' \'FHEAD\' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'FIELDS TERMINATED BY ","' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'TRAILING NULLCOLS' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo '(' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'FILE_RECORD_DESCRIPTOR position(1),' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'LINE_NO FILLER,' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'SCHEDULE_NO ,' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'SCHEDULE_DATE_TIME date' \'YYYYMMDD\' ',' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'UPLD_TIME_STAMP sysdate,' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'SEQ_NO "' ${exec_seq} '",' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'FILENAME CONSTANT ' \'$FILENAME\' ',' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo 'STATUS CONSTANT "UPLOADED"' >> $CTL_DIR/tjx_sc_req_upld.ctl
echo ')' >> $CTL_DIR/tjx_sc_req_upld.ctl`
使用上面的代码,当我在 fields terminated by
旁边添加 OPTIONALLY ENCLOSED BY '"'
时,shell 脚本也可以工作 fine.But,如下所示
echo 'FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' ' >> $CTL_DIR/tjx_sc_req_upld.ctl
我收到语法错误
./tjx_sc_req_upld.ksh: line 109: syntax error at line 216: `(`' unexpected
当我删除 optionally enclosed 时,我没有收到错误消息。
您最终得到了不匹配的引号。您需要进行一些转义才能获得文字单引号:
echo 'FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '\''"'\'' ' >> $CTL_DIR/tjx_sc_req_upld.ctl
您可以调换引号以使其不那么难看:
echo "FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' " >> $CTL_DIR/tjx_sc_req_upld.ctl