2009-06-04 27 views
2

我们有一个充满BIGINT数据类型的Teradata数据库。 SAS是该组织的主要分析引擎。 SAS访问库在BIGINT上扼流,因此强制所有代码在将变量返回到SAS之前将变量转换为整数或小数。例如:Teradata和SAS与BigInt的

proc sql; 
connect to database (blah blah); 
create table sas_dataset as 
    select * from connection to database(
    select 
     cast(bigint_var as integer), 
     varchar_var, 
     char_var, 
    from some_table 
    ); 
    disconnect from database; 
    quit; 

有没有人知道一种方法来解决这个问题?可能是铸造变量或SAS访问修复的宏?请记住,这个数据库中有成千上万的变量是bigint,并且对数据库进行更改是不可能的。

+0

你在9.1.3?这里有一个针对9.1.3发布的修补程序:http://support.sas.com/kb/34/729.html – cmjohns 2009-06-04 13:45:30

+0

我们应用了修补程序..它未能解决问题。 – AFHood 2009-06-04 13:54:31

+1

在这种情况下,我认为你最好的选择是联系他们的支持,因为这听起来像他们期望它的工作。 – cmjohns 2009-06-04 15:14:04

回答

2

如果您无法在SAS端进行修复,您可以在Teradata端创建一组视图来进行转换。然后让SAS接入的看法:

create view sas_cast_db.some_table as 
select col1, col2, cast(bigint_var as decimal(18)), col3 
from real_db.some_table; 

既然你有很多的表,有可能写一些SQL从数据字典自动生成这些。

1

问题是SAS最多只能处理BIGINT数据类型的15位数字。 SAS为这个问题提供了SAS 9.2的一些解决方法(上面提到的一个)。您还可以让SAS平台管理员安排更新SAS服务器,以便将BIGINT字段截断为15位数(应用明显警告),或更新您的LIBNAME语句以将所有BIGINT自动设置为转换。

http://support.sas.com/kb/39/831.html

-1

示例代码

data temp1; 
    set mylib.bigclass (dbsastype= (id='char(20)')); 
run;