Внешние таблицы по сравнению с SQLLoader

Самый легкий путь к , устанавливает фокус где-нибудь .
можно сразу задержать фокус, но установка фокуса где угодно инициирует LostFocus-событие на любой тип управления и заставит его обновить свой материал:

IInputElement x = System.Windows.Input.Keyboard.FocusedElement;
DummyField.Focus();
x.Focus();

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

TextBox t = Keyboard.FocusedElement as TextBox;
if ((t != null) && (t.GetBindingExpression(TextBox.TextProperty) != null))
  t.GetBindingExpression(TextBox.TextProperty).UpdateSource();

ComboBox c = Keyboard.FocusedElement as ComboBox;
if ((c != null) && (c.GetBindingExpression(ComboBox.TextProperty) != null))
  c.GetBindingExpression(ComboBox.TextProperty).UpdateSource();
7
задан David Aldridge 21 November 2009 в 10:51
поделиться

3 ответа

Большим преимуществом внешних таблиц является то, что мы можем запрашивать их изнутри базы данных с помощью SQL. Таким образом, мы можем просто запускать проверки валидации как операторы SELECT без необходимости в таблице хранения. Точно так же, если нам нужно выполнить некоторые манипуляции с загруженными данными, это почти всегда проще сделать с помощью SQL, а не команд SQLLDR. Мы также можем управлять загрузкой данных с помощью процедур DBMS_JOB / DBMS_SCHEDULER, что еще больше сокращает потребность в сценариях оболочки и заданиях cron.

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

В некоторых случаях - особенно если вы загружаете миллионы строк - подход SQLLDR может быть значительно быстрее. Однако разница не будет так заметна в более поздних версиях базы данных. Я полностью ожидаю, что SQLLDR в конечном итоге будет устаревшим в пользу внешних таблиц.

Если у вас уже есть зрелый и стабильный процесс, использующий SQLLDR, я признаю, что вы вряд ли ощутите огромные преимущества от переноса на внешние таблицы.

В некоторых случаях - особенно если вы загружаете миллионы строк - подход SQLLDR может быть значительно быстрее. Однако разница не будет так заметна в более поздних версиях базы данных. Я полностью ожидаю, что SQLLDR в конечном итоге будет устаревшим в пользу внешних таблиц.

Если у вас уже есть зрелый и стабильный процесс, использующий SQLLDR, я признаю, что вы вряд ли ощутите огромные преимущества от переноса на внешние таблицы.

В некоторых случаях - особенно если вы загружаете миллионы строк - подход SQLLDR может быть значительно быстрее. Однако разница не будет так заметна в более поздних версиях базы данных. Я полностью ожидаю, что SQLLDR в конечном итоге будет устаревшим в пользу внешних таблиц.

13
ответ дан 6 December 2019 в 10:00
поделиться

Если вы посмотрите на синтаксис внешней таблицы, он подозрительно похож на синтаксис управляющего файла SQL * Loader: -)

Если ваша внешняя таблица будет многократно использоваться в нескольких запросах, это может быстрее загружать таблицу (как вы это делаете сейчас), а не повторно сканировать внешнюю таблицу для каждого запроса. Как отмечает @APC, Oracle вносит в них улучшения, поэтому в зависимости от версии вашей БД YMMV.

3
ответ дан 6 December 2019 в 10:00
поделиться

I would use external tables for their flexibility.

It's easier to modify the data source on them to be a different file alter table ... location ('my_file.txt1','myfile.txt2')

You can do multitable inserts, merges, run it through a pipelined function etc...

Parallel query is easier ...

It also establishes dependencies better ...

The code is stored in the database so it's automatically backed up ...

3
ответ дан 6 December 2019 в 10:00
поделиться
Другие вопросы по тегам:

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