使用 SAS 将记录插入 DB2 数据库
Using SAS to insert records into DB2 database
为了给背景,我正在使用
- 大型机中的基础 SAS(由 JCL 执行)和
- DB2 作为数据库。
我有读取大型机数据集中数据库的键列表。我了解到我们可以将 sas 数据集与 DB2 table 连接起来,如下所示。
%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。
谢谢!
解决方法:
必须分配库才能写入数据库。请参考SAS手册here
如果您有必要的写入权限,您应该通过 proc sql insert into
语句来执行此操作。或者,如果您可以通过库访问 db2 table,则可以使用带有 modify
和 output
/ replace
语句的数据步骤。
您的上述查询会在 Work 库或声明默认库的任何位置创建一个本地 SAS 数据集。此 table 未 连接到您的后端 DB2 数据库,而只是用作导入 SAS 的副本。
考虑使用 ODBC SAS 库建立实时连接。如果不是 ODBC,请使用已安装的 DB2 API SAS。连接后,指定数据库中的所有 tables 将作为 SAS 库中可用的 SAS 数据集出现,这些不是导入的副本,而是 live tables。然后 运行 任何 proc sql
追加或使用 proc.append
将记录从 SAS 插入到 table。
下面是使用 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 库中的任何 table,因为这些数据集是实时的 table s,因此此类更改 将 反映在后端 DB2 数据库中。完成工作后,不要删除库(否则所有 table 将被清除),只需将其从环境中取消分配即可:
libname DBdata clear;
为了给背景,我正在使用 - 大型机中的基础 SAS(由 JCL 执行)和 - DB2 作为数据库。
我有读取大型机数据集中数据库的键列表。我了解到我们可以将 sas 数据集与 DB2 table 连接起来,如下所示。
%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。
谢谢!
解决方法: 必须分配库才能写入数据库。请参考SAS手册here
如果您有必要的写入权限,您应该通过 proc sql insert into
语句来执行此操作。或者,如果您可以通过库访问 db2 table,则可以使用带有 modify
和 output
/ replace
语句的数据步骤。
您的上述查询会在 Work 库或声明默认库的任何位置创建一个本地 SAS 数据集。此 table 未 连接到您的后端 DB2 数据库,而只是用作导入 SAS 的副本。
考虑使用 ODBC SAS 库建立实时连接。如果不是 ODBC,请使用已安装的 DB2 API SAS。连接后,指定数据库中的所有 tables 将作为 SAS 库中可用的 SAS 数据集出现,这些不是导入的副本,而是 live tables。然后 运行 任何 proc sql
追加或使用 proc.append
将记录从 SAS 插入到 table。
下面是使用 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 库中的任何 table,因为这些数据集是实时的 table s,因此此类更改 将 反映在后端 DB2 数据库中。完成工作后,不要删除库(否则所有 table 将被清除),只需将其从环境中取消分配即可:
libname DBdata clear;