Экспорт результата избранного оператора к формату CSV в DB2

Этот вопрос возникает ВСЕ ВРЕМЯ на SO. Это одна из первых вещей, с которыми борются новые разработчики Swift.

Предпосылки:

Swift использует концепцию «Необязательные» для работы со значениями, которые могут содержать значение или нет. В других языках, таких как C, вы можете хранить значение 0 в переменной, чтобы указать, что оно не содержит значения. Однако что, если 0 является допустимым значением? Тогда вы можете использовать -1. Что если -1 является допустимым значением? И так далее.

Опционы Swift позволяют вам установить переменную любого типа, которая будет содержать либо действительное значение, либо отсутствие значения.

Вы ставите вопросительный знак после типа, когда объявляете значение переменной (тип x или значение отсутствует).

Необязательный элемент - это фактически контейнер, который содержит либо переменную данного типа, либо ничего.

Необязательный элемент должен быть «развернут», чтобы получить значение внутри.

"!" оператор является оператором "развернуть силой". Он говорит: «Поверьте мне. Я знаю, что я делаю. Я гарантирую, что при запуске этого кода переменная не будет содержать ноль». Если вы ошибаетесь, вы терпите крах.

Если вы действительно не знаете , что вы делаете, избегайте "!" Принудительно развернуть оператор. Вероятно, это самый большой источник сбоев для начинающих программистов Swift.

Как обращаться с опционами:

Существует множество других способов борьбы с опционами, которые безопаснее. Вот некоторые (не исчерпывающий список)

Вы можете использовать «необязательное связывание» или «если позволено», чтобы сказать «если это необязательное содержит значение, сохраните это значение в новой, необязательной переменной. необязательный не содержит значения, пропустите текст этого оператора if ".

Вот пример необязательного связывания с нашим foo необязательным:

if let newFoo = foo //If let is called optional binding. {
  print("foo is not nil")
} else {
  print("foo is nil")
}

Обратите внимание, что переменная, которую вы определяете, когда используете необязательное связывание, существует (только в области видимости) в теле оператора if.

С другой стороны, вы можете использовать оператор защиты, который позволяет вам выйти из функции, если переменная равна nil:

func aFunc(foo: Int?) {
  guard let newFoo = input else { return }
  //For the rest of the function newFoo is a non-optional var
}

Операторы охраны были добавлены в Swift 2. Guard позволяет вам сохранить «золотой путь» через ваш код и избегайте постоянно увеличивающихся уровней вложенных if, которые иногда возникают в результате использования необязательного связывания «if let».

Существует также конструкция, называемая «оператор слияния ноль». Он принимает форму «необязательный_вар», «замена_вал». Он возвращает необязательную переменную того же типа, что и данные, содержащиеся в необязательной переменной. Если необязательный параметр содержит nil, он возвращает значение выражения после «??» символ. [1 123]

Таким образом, вы можете использовать код, подобный следующему:

let newFoo = foo ?? "nil" // "??" is the nil coalescing operator
print("foo = \(newFoo)")

Вы также можете использовать try / catch или обработку ошибок защиты, но, как правило, один из других методов выше является более чистым.

РЕДАКТИРОВАТЬ:

Другой, несколько более тонкий хитрость с опциями - это «неявно развернутые опционы. Когда мы объявляем foo, мы можем сказать:

var foo: String!

В этом случае foo все еще необязательно, но вам не нужно разворачивать его, чтобы ссылаться на него. Это означает, что каждый раз, когда вы пытаетесь сослаться на foo, вы теряете значение, если оно равно нулю.

Итак, этот код:

var foo: String!


let upperFoo = foo.capitalizedString

Сбой при ссылке на свойство foo capitalizedString, даже если мы не распаковываем foo принудительно. Печать выглядит нормально, но это не так.

Таким образом, вы хотите быть очень осторожным с неявно развернутыми опциями. (И, возможно, даже полностью избегайте их, пока у вас не будет четкого понимания дополнительных возможностей.)

Итог: когда вы впервые изучаете Swift, притворяйтесь, что символ «!» не является частью языка. Это может привести к неприятностям. [тысяча сто тридцать одна]

23
задан AngocA 9 November 2019 в 19:06
поделиться

2 ответа

Эту команду можно запустить из процессора командной строки (CLP) DB2 или изнутри приложения SQL, вызвав хранимую процедуру ADMIN_CMD

EXPORT TO result.csv OF DEL MODIFIED BY NOCHARDEL 
SELECT col1, col2, coln FROM testtable;

Есть много вариантов для IMPORT и EXPORT , которые можно использовать для создания файла данных, отвечающего вашим потребностям. Квалификатор NOCHARDEL подавляет символы двойных кавычек, которые в противном случае появлялись бы вокруг каждого символьного столбца.

Имейте в виду, что любой оператор SELECT может использоваться в качестве источника для вашего экспорта, включая присоединяется или даже рекурсивный SQL. Утилита экспорта также будет учитывать порядок сортировки, если вы укажете ORDER BY в своем операторе SELECT .

39
ответ дан 29 November 2019 в 01:51
поделиться

Согласно документации , вы хотите экспортировать тип del (разделитель по умолчанию выглядит как запятая, что вам и нужно). См. Дополнительную информацию о команде EXPORT на странице документации.

1
ответ дан 29 November 2019 в 01:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: