簡體   English   中英

在SAS中的Proc SQL中使用宏變量

[英]Use macro variables in Proc SQL in SAS

為表架構和表名定義了兩個宏變量,它們在SAS(Amazon RedShift的postgresql接口)的proc sql語句中使用,無法正確讀取sql語句。

%let table_schema = 'sales';
%let table_name = 'summary_table';

proc sql;
connect to ODBC(DSN='redshift_db', user=masteruser password='*pwd');
create table column_names as
select * from connection to odbc(
select distinct(column_name) as col_name from information_schema.columns where table_schema = &table_schema and table_name = &table_name;
);

create table dt as
select * from connection to odbc(
select * from &table_schema..&table_name;
);

QUIT;

第一次創建表會引發錯誤:

錯誤:CLI描述錯誤:錯誤:列中的“ summary_table”列不存在;

“ summary_table”實際上存在。

第二個表創建將引發錯誤:

錯誤:CLI描述錯誤:錯誤:“ sales”或附近的語法錯誤; 沒有使用該句柄執行查詢

這也是無效的。

檢查您的語法。

查看ERROR: column "summary_table" does not exist in columns;

這就是說,名為“ summary_table”的COLUMN在名為“ columns”的表上不存在。 where子句試圖比較2列,而不是列和字符串。

編寫不帶宏的查詢,並使查詢生效。 然后嘗試放入宏。

這是PostGreSQL ODBC驅動程序而不是SAS的語法問題。

我以前沒有使用過PostGreSQL驅動程序,但我知道不同的DB處理引號的方式不同。 可能是PostGreSQL想要雙引號而不是單引號。 如果是這種情況,那么我將像這樣更改您的代碼:

%let table_schema = sales;
%let table_name = summary_table;

proc sql;
connect to ODBC(DSN='redshift_db', user=masteruser password='*pwd');
create table column_names as
select * from connection to odbc(
select distinct(column_name) as col_name from information_schema.columns where table_schema = "&table_schema" and table_name = "&table_name";
);

create table dt as
select * from connection to odbc(
select * from &table_schema..&table_name;
);

QUIT;

請注意,我已經從%let語句中刪除了單引號,並在第一個查詢中的where子句中添加了雙引號。

從宏var中刪除單引號也可以解決第二個查詢遇到的語法錯誤,因為您實際上在嘗試執行以下操作:

select * from 'sales'.'summary_table';

...這很可能是不正確的。 同樣,我沒有使用過PostGreSQL,所以我不能肯定地說-如果我寫錯了,請更正我,這是正確的語法。

最后,我建議在一般情況下使用宏變量時,不要在字符串兩邊加上單引號。 即。

%let table_schema = 'sales'; * AVOID THIS WHEN POSSIBLE;

VS

%let table_schema = sales;   * USE THIS APPROACH WHEN POSSIBLE;

在使用宏變量的地方加上雙引號,您可能會發現事情容易一些。 當然,在某些情況下,您可能需要在宏變量的值中加上引號,但是根據一般經驗,我盡可能避免這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM