【发布时间】:2017-01-19 19:35:25
【问题描述】:
我们最近在我们的 DB2 上安装了加速器 (IDAA),我主要使用 SAS 访问它。
由于网络问题,这要求我们先创建表,然后再插入行。
我的问题是创建具有正确时间戳格式的表,我可以使用 select 语句创建表,但这很慢,但在这里我可以看到 SAS 中的格式是 DATETIME30.6
但如果我尝试类似:
RSUBMIT prod_acc;
Proc delete data=user.table1; run; %PUT &sqlxrc &sqlxmsg;
proc sql inobs=MAX stimer feedback noerrorstop;
connect to db2(ssid=server);
create table user.table1
(
date datetime30.6
,reference char(16)
,transact char(20)
,alias char(60)
,amount decimal(15,2)
,currency char(3)
);
%PUT &sqlxrc &sqlxmsg;
quit;
run;
在日志中给出以下内容
(
15 date datetime30.6
-----------
1 22
200
WARNING 1-322: Assuming the symbol DATE was misspelled as datetime30.
ERROR 22-322: Syntax error, expecting one of the following: a quoted string,
an integer constant, ), ',', CHECK, DISTINCT, FORMAT, INFORMAT, LABEL, LEN,
LENGTH, NOT, PRIMARY, REFERENCES, TRANSCODE, UNIQUE, ^, ~.
ERROR 200-322: The symbol is not recognized and will be ignored.
如果我查看 DB2,该列的类型为 timestmp,SAS 无法将其识别为类型。
(
31 date timestmp
--------
22
76
ERROR 22-322: Syntax error, expecting one of the following: CHAR, CHARACTER, DATE, DEC,
DECIMAL, DOUBLE, FLOAT, INT, INTEGER, NUM, NUMERIC, REAL, SMALLINT, VARCHAR.
ERROR 76-322: Syntax error, statement will be ignored.
尝试谷歌搜索并找到许多不同版本的答案,但我看不到与此相关的内容,最接近的是手动创建格式,但我不知道该怎么做。
有什么想法吗?
【问题讨论】:
-
USER是您在 SAS 中定义的 libref 的名称还是远程 DB2 数据库中的数据库/模式的名称?您编写的语法是 SAS 代码,因此假设 USER 是 libref。如果要将代码推送到远程数据库,请使用 PROC SQL 中的execute语句。 -
用户是我的windows用户,只是一种不泄露信息的方式:D
-
使用您的用户名作为 libref 可能效果不佳,因为它可能超过 8 个字符。