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

Oracle Proc SQL查询的数据类型错误无效,oracle,sas,macros,pass-through,Oracle,Sas,Macros,Pass Through,我正在使用Oracle传递和宏循环创建一个基本查询。当我连接到Oracle,从连接创建表时,它工作得很好,但当我只是尝试使用Oracle的execute(DDL语句)时,它给了我一个无效的数据类型错误。我不知道怎么修。我只是从另一个现有表创建表。我将SAS EG用于这个特定的程序,但只是代码编辑器,而不是查询生成器 &STATES宏解析为我创建的全局宏中的状态列表 我已经使用connecttooracle,createtablefromconnection-pass-through方法成功地编写

我正在使用Oracle传递和宏循环创建一个基本查询。当我连接到Oracle,从连接创建表时,它工作得很好,但当我只是尝试使用Oracle的execute(DDL语句)时,它给了我一个无效的数据类型错误。我不知道怎么修。我只是从另一个现有表创建表。我将SAS EG用于这个特定的程序,但只是代码编辑器,而不是查询生成器

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

我已经使用connecttooracle,createtablefromconnection-pass-through方法成功地编写了相同的查询,但是我还想让它只使用execute方法,看看哪个测试更有效。但是,当我使用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;
您使用的是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;

是的!成功了,谢谢!我没有意识到这是特定于SAS的,现在它与前面的方法一起工作是有意义的,因为这是SAS语言,而不是仅限于Oracle的execute方法。不知道为什么我以前没试着把它拿出来。哦,好吧。再次感谢!!是的!成功了,谢谢!我没有意识到这是特定于SAS的,现在它与前面的方法一起工作是有意义的,因为这是SAS语言,而不是仅限于Oracle的execute方法。不知道为什么我以前没试着把它拿出来。哦,好吧。再次感谢!!