从SAS连接到Oracle

时间:2018-02-18 03:51:38

标签: sas

这是我如何配置我的LibName

LIBNAME OrcaleSAS ORACLE USER=UserName PASSWORD=pwd*** PATH = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host.unix.####.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=prod.tk.com)))'

要获取下面的数据,我正在使用的代码

PROC SQL;
    connect using OracleSAS AS OracDB;
select * from connection to oracle
(select * from ENTITY_DATES_WK13);
disconnect from OracDB;
quit;

我收到错误 OracleSAS不是SAS名称& LIBNAME语句中的错误,我对SAS来说相当新...... !!

4 个答案:

答案 0 :(得分:2)

连接到oracle或任何dbms可以通过libname或显式传递来完成。 Libname方法用于访问SAS中的oracle表(或任何dbms)(表通常移动到SAS)。显式方法(使用connect语句)其中查询直接发送到Oracle(或提到的dbms)。对于oracle(或anydbms)表,此方法不可互换,因此您会收到错误。

下面是libname方法

 LIBNAME OrcaleSAS ORACLE USER=UserName PASSWORD=pwd*** PATH = 
   '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host.unix.####.com)(PORT=1521))
    (CONNECT_DATA=(SERVICE_NAME=prod.tk.com)))'   
 libname sastab "/whatever path/";


 proc sql;
create table sastab.tablename as
select *
 oratable.tablename
quit;

下面是显式传递方法

 proc sql;    
  connect to oracle as myconn (user=smith password=secret 
   path='myoracleserver'); 

   create table sastab.newtable as
  select * 
     from connection to myconn       
        (select *          
           from oracleschematable);  

      disconnect from myconn; 
    quit; 

答案 1 :(得分:1)

您用于库的名称(libref)只能使用8个字符。

OracleSAS是9个字符。

使用更短的东西。

答案 2 :(得分:0)

设置libname时,您不需要PROC SQL的Connect部分。您将两种连接SQL数据库的方法混合为一种方法。

假设您的libname工作正常,您可以像查询其他任何SAS表一样查询它:

PROC SQL;
  create table want as
  select * from ENTITY_DATES_WK13;
quit;

proc print data=want(obs=5);
run;

另一种方法是通过'这意味着查询将完全传递给服务器以在该端运行。这意味着内部查询需要符合Oracle标准,并且您无法使用SAS功能或数据。

答案 3 :(得分:0)

最后我结束了这样的事情..,

Public Function GetCol(c As String) As Long
Dim i As Long, t As Long
c = UCase(c)
For i = Len(c) To 1 Step -1
    t = t + ((Asc(Mid(c, i, 1)) - 64) * (26 ^ (Len(c) - i)))
Next i
GetCol = t
End Function