Условная загрузка с помощью Sql*Loader
Используя SQL*Loader, я хочу следующее условие:
Загрузите запись, если:substr(Col,3,2)='06'
Col ------ 10062034 . . .
Есть ли способ объединить WHEN с substr (или любой другой функцией) в контрольном файле?
Я старался WHEN (substr(Col,3,2)='06')
но это не сработало.
2 ответа
Нет, синтаксис для WHEN
пункт довольно ограничительный; см. http://docs.oracle.com/cd/B14117_01/server.101/b10825/ldr_control_file.htm. Вы можете ограничить только на основе целого поля, или на основе конкретных позиций символов. Тем не менее, если вы используете фиксированный формат, то вы можете выразить substr(Col,3,2)
как диапазон позиций персонажа, и это будет работать. Например, если Col
начинается с символа #20, затем вы можете использовать WHEN (22:23) = '06'
, Но если вы используете бесплатный формат, как FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
тогда вы вообще не будете знать смещение символа Col
,
Вы можете комбинировать When с другой функцией, как ваш код:
CASE substr(col,3,2)
WHEN '06' THEN
-- Do st
ELSE
-- Do st
END
НТН.