我创建了一个类似
的SAS表Create table DX.SAS_Table as
select * from connection to oracle
(
select * from my table
)
现在我想将SAS_Table的计数插入到另一个Oracle表中,所以我这样做了
Proc sql;
connect to oracle (connection..!)
execute(
INSERT INTO TEST_SAS_INSERT
select count(*) from SAS_Table
) by oracle;
退出; 它抛出错误错误:ORACLE执行错误:ORA-00942:表或视图不存在,我试过这个选择计数(*)来自Dual工作但不是来自SAS_Table我理解这个抛出错误Oracle将SAS_table视为oracle表,我该怎么做?
答案 0 :(得分:2)
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
答案 1 :(得分:2)
connect语句在oracle中执行所有操作,并且不会对SAS表执行任何操作。这可以通过两种方式解决。通过使用显式的sql-pass through或者隐式传递
第一种方法将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;
或使用不带连接语句的libname方法(隐式传递方法)
libname oratable oracle user = user password = password path = path;
proc sql;
Insert into oratable.tablename as
select count(*)
from
on SAS_Table
quit;