将SAS表值插入Oracle表

将SAS表值插入Oracle表,oracle,sas,Oracle,Sas,我创建了一个SAS表,如 Create table DX.SAS_Table as select * from connection to oracle ( select * from my table ) 现在我想将SAS_表的计数插入到另一个Oracle表中,所以我这样做了 Proc sql; connect to oracle (connection..!) execute( INSERT INTO TEST_SAS_INSERT select count(*) f

我创建了一个SAS表,如

Create table DX.SAS_Table as 
select * from connection to oracle
(
  select * from my table
)
现在我想将SAS_表的计数插入到另一个Oracle表中,所以我这样做了

Proc sql;
connect to oracle (connection..!)
execute(
    INSERT INTO TEST_SAS_INSERT
    select count(*) from SAS_Table
) by oracle;
退出;
它向我抛出错误错误:ORACLE执行错误:ORA-00942:表或视图不存在,我尝试了此Select count*从其工作的双精度中,但不是从SAS_表中。我理解此抛出错误ORACLE将SAS_表视为ORACLE表,如何执行此错误?

执行中的语句仅在ORACLE会话中执行。Oracle会话无法通过网络访问并读取SAS表

您可以创建对Oracle的库引用,并从SAS插入到Oracle表中

libname MYORA ....;
proc sql;
  insert into MYORA.TEST_SAS_INSERT (my_count_column_name)
  select count(*) from DX.SAS_Table;
您还可以执行计数并将结果存储在宏变量中,并在带有values子句的insert语句中使用该宏变量

proc sql noprint;
  select count(*) into :MY_COUNT from DX.SAS_table;
  connect ...
  execute (
    insert into MYORA.TEST_SAS_INSERT (my_count_column_name)
    values (&MY_COUNT);
  ) by Oracle

EXECUTE中的语句仅在Oracle会话中执行。Oracle会话无法通过网络访问并读取SAS表

您可以创建对Oracle的库引用,并从SAS插入到Oracle表中

libname MYORA ....;
proc sql;
  insert into MYORA.TEST_SAS_INSERT (my_count_column_name)
  select count(*) from DX.SAS_Table;
您还可以执行计数并将结果存储在宏变量中,并在带有values子句的insert语句中使用该宏变量

proc sql noprint;
  select count(*) into :MY_COUNT from DX.SAS_table;
  connect ...
  execute (
    insert into MYORA.TEST_SAS_INSERT (my_count_column_name)
    values (&MY_COUNT);
  ) by Oracle

connect语句在oracle中执行所有操作,不会对SAS表执行任何操作。这可以通过两种方式解决。通过使用显式sql传递或隐式传递

第一种方法是将SAS表移动到Oracle,然后执行类似插入的操作 /*创建oracle表*/

  proc sql;
  create table oratable.tablename as
  select *
  from SAS_Table;
  quit;
然后在connect语句中执行insert显式传递方法

 proc sql;
 connect to oracle (user=&myid orapw=&mypwd path="&mydb");
  execute ( INSERT INTO schema.finaloratable
         select count(*) from schema.tablename) by oracle; 
  disconnect from oracle;
  quit;
或者使用不带connect语句的libname方法隐式传递方法

 proc sql;
 connect to oracle (user=&myid orapw=&mypwd path="&mydb");
  execute ( INSERT INTO schema.finaloratable
         select count(*) from schema.tablename) by oracle; 
  disconnect from oracle;
  quit;
libname oratable oracle user=用户密码=密码路径=路径

proc sql;
Insert into oratable.tablename as
select count(*)
from 
on SAS_Table
quit;

connect语句在oracle中执行所有操作,不会对SAS表执行任何操作。这可以通过两种方式解决。通过使用显式sql传递或隐式传递

第一种方法是将SAS表移动到Oracle,然后执行类似插入的操作 /*创建oracle表*/

  proc sql;
  create table oratable.tablename as
  select *
  from SAS_Table;
  quit;
然后在connect语句中执行insert显式传递方法

 proc sql;
 connect to oracle (user=&myid orapw=&mypwd path="&mydb");
  execute ( INSERT INTO schema.finaloratable
         select count(*) from schema.tablename) by oracle; 
  disconnect from oracle;
  quit;
或者使用不带connect语句的libname方法隐式传递方法

 proc sql;
 connect to oracle (user=&myid orapw=&mypwd path="&mydb");
  execute ( INSERT INTO schema.finaloratable
         select count(*) from schema.tablename) by oracle; 
  disconnect from oracle;
  quit;
libname oratable oracle user=用户密码=密码路径=路径

proc sql;
Insert into oratable.tablename as
select count(*)
from 
on SAS_Table
quit;

我想您在引用宏:值和我的计数时错过了&号我想您在引用宏:值和我的计数时错过了&号