SAS connect to Oracle. Part 5. PL/SQL

Всем добрый день!

Сегодня речь пойдет о выполнении PLSQL кода через SAS.

В SAS начиная с версии SAS 9.2 можно запускать plsql код используя execute().

Ниже привожу два примера, в одном из которых используются bind variable, в другом нет.

Также обратите внимание на большую разницу в с коросте выполнения скриптов:

without bind variable:

Как видно из лога цикл в PLSQL выполнялся 18 секунд

Теперь запустим тот же код с использованием bind переменной:

bind variable:

Здесь, как мы видим скорость выполнения цикла уменьшилась до 1 секунды.

Так что через SAS Access to Oracle можно выполнять любой PLSQL код в том числе и создавать процедуры.

Если данный пост был полезен Вам можете оставьте свой отзыв.

С уважением,
Николай.

SAS connect to Oracle. Part 4. Hints.

Всем добрый день.

Сегодня рассмотрим задачу использования Oracle Hints при обращении к БД Oracle из SAS.

Для этого вам потребуется всего лишь в строку соединения добавить следующие слова:

preserve_comments

А теперь рассмотрим примеры:
Пример довольно простой — мы хотим узнать сколько строк в некой таблице Oracle

1. Вариант (без preserve_comments)

Прошу обратить внимание на Log данного запроса из которого видно, что наш parallel hint был вычеркнут из запроса.

2. Вариант (c preserve_comments)

А в этом варианте видно, что выражение с hint дошло до oracle именно в том виде в котором мы написали.

P.S.

Для получения подробных логов  необходимо использовать подключение следующих опций:

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

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

SAS connect to Oracle. Part 3. BULKLOAD.

В предыдущих примерах мы рассматривали задачу загрузки данных из Oracle в SAS.
Теперь же давай попробуем из положить из SAS в Oracle.

1. Data set.

В данном примере мы видим, что время выгрузки данных в Oracle существенно больше чем время загрузки, а именно более 2-х минут против 10 секунд загрузки.

 2. Proc sql.

Здесь также видим превышение 2-х минут.

3. Proc sql + BULKLOAD

В данном примере мы использовали опцию BULKLOAD и время выгрузки уменьшилось с более чем 2-х минут до 11 секунд.

P.S. Для работы параметра BULKLOAD вам необходимо чтобы стоял полный клиент Oracle, а именно в директории Oracle_HOMEproduct11.2.0client_1BIN находился файл: sqlldr.exe.
У меня изначально была поставлена легкая версия клиента и этот файл отсутствовал. Пришлось переставлять клиента.

SAS connect to Oracle. Part 2. Pass-Through.

Мы уже рассмотрели способ соединения с Oracle по средством libname.

Теперь рассмотрим способ Pass-Through или еще такой способ называют push down.

В данном случае выполняемый код «проваливается в базу данных» и обратно возвращается результат запроса.

Прошу обратить внимание, что время выгрузки идентично примерам из предыдущего поста и составляет чуть меньше 10 секунд.

А теперь добавим еще один параметр readbuff=100000 в строку соединения и получим:

И лога видно, что время выгрузки меньше 5 секунд на 1 миллион записей. В принципе с этим параметром можно поиграть, но при такой конструкции про него лучше не забывать.

С уважением,
Николай.

SAS connect to Oracle. Part 1. Libname.

Сегодня рассмотрим способы взаимодействия SAS и Oracle.

Для начала нужно убедиться, что в вашу лицензию входит компонент SAS/ACCESS Interface to Oracle (сделать это можно запустив proc setinit; и убедиться что в перечне компонент есть описанный выше см предыдущий пост).

Есть несколько способов соединения:

Libname:

В таком случае можно обращаться к таблицам oracle следующими способами:

1. Data-set.

2. Proc sql.

Хочется отметь, что второй вариант более подходит для людей который изначально привыкли писать SQL запросы.

В следующем посте рассмотрим альтернативный способ соединения с БД Oracle.