Oracle Proc SQL查询的数据类型错误无效
我正在使用Oracle传递和宏循环创建一个基本查询。当我连接到Oracle,从连接创建表时,它工作得很好,但当我只是尝试使用Oracle的execute(DDL语句)时,它给了我一个无效的数据类型错误。我不知道怎么修。我只是从另一个现有表创建表。我将SAS EG用于这个特定的程序,但只是代码编辑器,而不是查询生成器 &STATES宏解析为我创建的全局宏中的状态列表 我已经使用connecttooracle,createtablefromconnection-pass-through方法成功地编写了相同的查询,但是我还想让它只使用execute方法,看看哪个测试更有效。但是,当我使用execute方法时,我得到了数据类型错误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方法成功地编写
%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方法。不知道为什么我以前没试着把它拿出来。哦,好吧。再次感谢!!