使用SAS将记录插入DB2数据库

时间:2015-10-19 04:00:43

标签: db2 sas

为了给出背景,我正在使用 - 大型机中的基础SAS(由JCL执行)和 - DB2作为数据库。

我有一个在大型机数据集中读取数据库的键列表。我知道我们可以将带有DB2表的sas数据集加入,如下所示。

%LET DSN=DSN;
%LET QLF=QUALIFIER;
PROC SQL;
     CONNECT TO DB2(SSID=&DSN);
     CREATE TABLE STAFFTBL AS
            (SELECT * FROM SASDSET FLE,
                           CONNECTION TO DB2
                                (SELECT COL1, COL2, COL3
                                   FROM &QLF..TABLE_NAME)
                                 AS DB2 (COL1, COL2, COL3)
             WHERE DB2.COL1 = FLE.COL1);
     DISCONNET FROM DB2;
     %PUT &SQLXMSG;
QUIT;

有人可以建议我,如果我有一个数据集,其中包含要插入大型机数据集的值列表,我们应该如何进行。

我们可以读取大型机数据集并获取SAS数据集中的值。但我无法猜测如何使用sas数据集向DB2插入值。

我知道我们可以使用COBOL来做到这一点。但我愿意学习是否有可能使用SAS。

谢谢!

解决方案: 必须分配库来写入DB。请参阅SAS手册here

2 个答案:

答案 0 :(得分:1)

您的上述查询在工作库或声明默认库的任何位置创建本地SAS数据集。此表连接到您的后端DB2数据库,而只是一个用作导入SAS的副本。

考虑使用ODBC SAS库建立实时连接。如果不是ODBC,请使用已安装的DB2 API SAS。连接后,指定数据库中的所有表将作为SAS库中的可用SAS数据集出现,这些不是导入的副本,而是实时表。然后运行任何proc sql追加或使用proc.append将记录从SAS插入表中。

以下是DSN或非DSN的一般示例,您可以根据您的凭据或数据库驱动程序类型进行修改。

* WITH DSN;
libname DBdata odbc datasrc="DSN Name" user="username" password="password";

* WITH DRIVER (NON-DSN) - CHECK DRIVER INSTALLATION;
libname DBdata odbc complete="driver=DB2 Driver; Server=servername;
                              user=username; pwd=password; database=databasename;";

追加程序:

* WITH SQL;
proc sql;
      INSERT INTO DBdata.tableName (col1, col2, col3) 
      SELECT col1, col2, col3 FROM SASDATASET;
quit;

* WITH APPEND (ASSUMING COLUMNS MATCH TOGETHER);
proc datasets;
    append base = DBdata.tableName
    data = SASDATASET
    force;
quit;

注意:请注意不要无意中添加,修改或删除SAS ODBC库中的任何表,因为这些数据集是实时表,因此这些更改将反映出来在后端DB2数据库中。完成工作后,不要删除库(或者将清除所有表),只需从环境中取消分配:

libname DBdata clear;

答案 1 :(得分:0)

如果您具有必要的写访问权限,则应通过proc sql insert into语句执行此操作。或者,如果您可以通过库访问db2表,则可以使用包含modifyoutput / replace语句的数据步骤。