2011-08-12 3 views
3

일부 데이터를 덤프하고 다시로드하기 위해 배치 모드 (매우 조용한 모드 인 '-ss')에서 select 쿼리 (-e 'SELECT ...')를 사용하여 mysql 클라이언트를 사용합니다 중간 결과를 표준 출력으로 반환합니다. 결과는 LOAD DATA INFILE로 처리됩니다.배치 모드에서 mysql에 NULL을 어떻게 피할 수 있습니까?

stdout 리디렉션이 없기 때문에 SELECT INTO OUTFILE은 옵션이 아닙니다. 쿼리 결과 크기에 비례하여 메모리를 사용하지 않고이 작업을 수행하는 트릭이 있으면 매우 환영합니다.

이제 '-ss -e'의 문제점은 NULL이 'NULL'로 출력된다는 것입니다.

이제 데이터 세트에 'NULL'(문자열) 값이 없다고 가정하면 [awk를 사용하여] 일종의 대체 할 수 있습니다. 또는 그 전제가 없다면 IFNULL()을 사용하여 [awk]로 다시 대체 할 가능성이 매우 낮은 문자열을 사용할 수 있습니다.

내가 알고 싶은 것은 : SQL에서 직접 '깨끗한'이스케이프를 수행 할 수있는 방법이 있습니까? 분명히 IFNULL을 사용하여 출력에서 ​​'\ N'을 얻을 수 없습니다. 왜냐하면 슬래시가 이스케이프되기 때문입니다.

답변

0

NVL 함수를 사용하여 SQL의 일부를 NULL에서 다른 것으로 변환 할 수 있습니다. http://www.techonthenet.com/oracle/functions/nvl.php

+0

이것은 작동하지 않습니다. IFNULL과 동일합니다. 문제는 NULL 출력으로 '\ N'이 필요하다는 것입니다. 자, 내가 슬래시를 약간 삽입하면, mysql 클라이언트는 (적절하게) 이스케이프하기 때문에 '\\'가 출력 될 것입니다. – Marcus