Proc SQL 查询的无效数据类型错误

Invalid DataType Error for Proc SQL Query

我正在使用 Oracle 传递和宏循环创建基本查询。当我连接到 Oracle,从连接创建 table 时它工作正常,但是当我只是尝试使用 Oracle 的执行(DDL 语句)时,它给我一个无效的数据类型错误。我不确定如何解决它。我只是从另一个现有的 table 创建 table。我正在为这个特定程序使用 SAS EG,但只是代码编辑器而不是查询生成器。

&STATES 宏解析为我创建的全局宏中的状态列表

我已经使用连接到 Oracle 成功地编写了相同的查询,从连接传递方法创建 table 但我还想让它与执行方法一起工作以查看测试哪个更高效的。但是,当我使用 execute 方法时,出现数据类型错误。

%let NUM=2;      
%let FT=LT;    
%let STATES=&&STATESR#  

PROC SQL;
connect to oracle(path=&mydb user=&USER pw=&PW);

%macro DTCNT() / parmbuff; 
%let i=1;
%let ST=%scan(&SYSPBUFF,&I);  

%do %while (%str(&ST)^=);

execute(CREATE TABLE TMSIS_&ST._&FT._HDR_ADJDT_CNTS1 (bulkload=yes dbcreate_table_opts=nologging) AS
         SELECT adj_date,
                count(*) as row_cnt 
         from mcd_r&NUM._own.&ST._&FT._header_f
         group by adj_date
         order by adj_date) by oracle;

execute (commit) by oracle;

      %let i=%eval(&I+1);  
      %let ST=%scan(&SYSPBUFF,&I);
      %end;
%mend DTCNT;
%DTCNT(&STATES);

disconnect from oracle;
QUIT;

错误:ORACLE 执行错误:ORA-00902:无效数据类型。

您正在使用 EXECUTE() 语句,因此其中的 SQL 必须是 Oracle 代码。 Oracle 不理解 SAS 风格的数据集选项。您似乎要求创建一个名为 bulkload 且数据类型为 yes.

的变量

也许你的意思是这样的?

execute(
  CREATE TABLE TMSIS_&ST._&FT._HDR_ADJDT_CNTS1 AS
  SELECT adj_date
       , count(*) as row_cnt
  from mcd_r&NUM._own.&ST._&FT._header_f
  group by adj_date
) by oracle;