1

我对 SAS 相当陌生,我遇到了一个问题,我认为可能有比我目前发现的更好的解决方案。

我需要使用来自具有大约 10,000 条记录的 SAS 数据集的数据更新具有大约 100 万行的 Oracle 数据库表。

我在 proc sql 中使用了更新语句,但更新 Oracle 表需要几个小时。现在,我正在将 SAS 数据集中的数据加载到 Oracle db 中的临时表中,并执行 proc sql pass through execute 语句以从临时表中更新主表。这最多只需要几分钟。

然而,这对编程来说相当麻烦,而且我需要从我的 SAS 代码中的多个函数更新 Oracle 表。

SAS 中是否有类似于 JDBC 批量更新的类比(我在参与 SAS 之前用于进行 Java 编程)?比在 proc sql 中使用更新语句更快,但比使用传递的临时表 + 更新更容易编码的东西?

4

1 回答 1

0

您是否使用 SAS/Access 将您的 SAS 会话连接到 Oracle?

在我的情况下,我使用 SAS/Connect JDBC。

SAS/Connect 是将 SAS 底层系统连接到 JEE 的一种非常简单但有效的策略。本质上,sas/connect 是 sas 执行 sas -dmr 的另一个 telnet 实现。

我使用 sas/connect jdbc 将 sas 数据提取到我的 jsp 中,然后使用我们都熟悉的 java 编程技术将数据推送到 oracle 或 sql server 中。

阅读我关于使用 sas/connect 将 sas 连接到 JEE 的古老论文:http: //www.nesug.org/proceedings/nesug04/ap/ap02.pdf。顺便说一句,不要试图通过纸上列出的联系人与我联系 - 他们是古老的。

回应您的进一步声明

我以为您想要一种使用 JDBC 将数据插入 Oracle 的方法?我的论文向您展示了如何在 JSP 中嵌入整个 SAS 宏或 SQL 或任何文本块,然后提交该文本块以通过 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 中每次迭代结果集或迭代结果集来交织插入以生成 SQL 插入值的文本块,然后将其提交给 Oracle JDBC。

只要您知道如何使用 JSP 并愿意了解我编写的文本块标记库的工作原理,它就只是一个 JSP。你看,我使用这种技术允许 JSP 运行已经在生产批处理模式下运行多年的 SAS 宏,而无需对宏进行任何更改。不仅如此,标签库还允许我将 java 和 jsp 变量解析嵌入到宏或 sas/sql 块中。

我编写了这个块文本标记库,因为我曾经在 Perl(2003 年之前)中执行此类操作,其中 Perl(和其他脚本语言)允许您将变量分配给脚本代码中的连续文本块。

标签库使用说明:

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

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

于 2010-09-02T23:27:16.700 回答