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;
我正在使用 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;