2012-09-19 3 views
0

infobright 프롬프트에서 실행할 때 쿼리를 완벽하게 정상적으로 실행에 스크립트에서 실행이는 방법입니다 스크립트입니다로드 데이터 INFILE 오류시 Infobright

mysql -u amr_ts_scripts -pamr_ts_scripts MVR4_ETL_DB -S /tmp/mysql-ib.sock -N -e 
$'LOAD DATA INFILE \'/tmp/test.agg\' 
IGNORE INTO TABLE tb_message_content \n  
FIELDS TERMINATED BY \',\' \n    
OPTIONALLY ENCLOSED BY \'"\' \n    
ESCAPED BY \'\\\'\n  
LINES TERMINATED BY \'\\n\';' 

오류가 인용 된 쿼리를 해석 :

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''\' 
     LINES TERMINATED BY ''' at line 4 
PAGER set to stdout 

수있는 사람 내가 직면하고있는 문제를 지적해라 ??

+0

그래서 '$'LOAD _....는 배쉬'$ 'str''을 뜻하며'-e'를 통해 문자열 인수로 format과 all 명령 전체를 전달합니다. ? '$ "LOAD ..."'로 전환하여 작은 따옴표로 이스케이프 문자를 생략하십시오. 또한,'\ n'을 포맷팅하는 것이 왜 복잡합니까? 네가 일할 때까지 그걸 버려. 행운을 빕니다. – shellter

+0

탈출을 피하려면 load.sql과 같이 load 문을 파일에 넣고'#mysql {some_params} ravnur

답변

0
stmt="LOAD DATA INFILE '$1' IGNORE INTO TABLE $2 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\\\\' LINES TERMINATED BY '\n'; 

각 '\'를 이스케이프 처리하려면 ESCAPED BY '\\'가 필요하므로 스크립트의 위 문장은 작동합니다.