Обновление таблицы Oracle данными из набора данных SAS с использованием кода SAS - PullRequest
1 голос
/ 26 июля 2010

Я довольно новичок в SAS и столкнулся с проблемой, которая, по-моему, имеет лучшее решение, чем то, что я нашел до сих пор.

Мне нужно обновить таблицу базы данных Oracle, которая содержит около 1 миллиона строк, с данными из набора данных SAS, содержащего около 10000 записей.

Я использовал оператор update в proc sql, но для обновления таблицы Oracle требуются часы. Прямо сейчас я загружаю данные из набора данных SAS во временную таблицу в Oracle db и выполняю команду proc sql pass through execute для обновления основной таблицы из временной таблицы. Это займет максимум пару минут.

Однако, это довольно громоздко для программирования, и мне нужно обновить таблицу Oracle из нескольких функций в моем коде SAS.

Существует ли аналог пакетного обновления JDBC в SAS (я использую программирование на Java перед тем, как участвовать в SAS)? Что-то, что быстрее, чем использование оператора update в proc sql, но проще для кода, чем временная таблица + обновление с использованием pass through?

1 Ответ

0 голосов
/ 03 сентября 2010

Используете ли вы SAS / Access для подключения сеансов SAS к Oracle?

В моей ситуации я использую SAS / Connect JDBC.

SAS / Connect - очень простая, но эффективная стратегия для сопряжения системы подложек SAS с JEE. По сути, sas / connect - это еще одна реализация telnet, которую sas выполняет для выполнения sas -dmr.

Я извлекаю данные sas, используя sas / connect jdbc, в мой jsp, а затем помещаю данные на сервер Oracle или SQL, используя методы программирования Java, с которыми мы все знакомы.

Прочтите мою древнюю статью об использовании sas / connect для подключения sas к JEE: http://www.nesug.org/proceedings/nesug04/ap/ap02.pdf. Кстати, не пытайтесь связаться со мной с контактами, перечисленными на бумаге - они древние.

В ответ на ваше дальнейшее заявление :

Я думал, вы хотите использовать JDBC для вставки данных в Oracle? В моей статье показано, как встроить целый блок макроса SAS или SQL или любой текст в JSP, а затем передать этот блок текста для запуска через SAS / Connect.

String datasetname = request.getParameter("datasetname");
String where = request.getParameter("where");

<t:text id="macHello">
%macro hello(datasetname);
 data &datasetname;
 /* code to create your data */
 run;
%mend;

%hello(<%=datasetname%>);
</t:text>

sasConnect.submit(macHello);

<t:text id="SQLgetRecs">
 SELECT *
 FROM <%=datasetname%>
 WHERE <%=where%>
</t:text>

ResultSet mydata =
sasConnJDBC.executeQuery(SQLgetRecs);

Тогда делайте все, что вам нужно сделать с Java, либо путем переплетения вставки в Oracle за итерацию Resultset или итерации набора результатов для создания текстового блока SQL вставки ЗНАЧЕНИЯ который вы затем отправляете в Oracle JDBC.

Это был бы просто JSP, при условии, что вы знаете, как работать с JSP, и хотите понять, как работает библиотека тегов текстовых блоков, которую я написал. Видите ли, я использую эту технику, чтобы JSP мог запускать макросы SAS, которые годами работали в производственном пакетном режиме, без каких-либо изменений в макросах. Мало того, тег lib позволяет мне встраивать разрешение переменных java и jsp в макросы или блоки sas / sql.

Я написал этот тег block-text lib, потому что раньше я делал такие операции в Perl (до 2003 года), где Perl (и другие языки сценариев) позволяет назначать переменную непрерывному блоку текста в коде сценарий.

Инструкция по использованию тега lib:

http://h2g2java.blessedgeek.com/2009/07/jsp-text-custom-tag.html

http://h2g2java.blessedgeek.com/2009/07/referencing-text-jsp-custom-tag-defined.html

...