用循環生成數據表的grips變量大家好,
我用多個表名編寫了執行SQL()數據表的循環。為了管理數據表,我試圖為每個表創建一個夾點,但是失敗了。
在下面的代碼上需要大家的幫助
sql_code 1 = Expr( "..." );
sql_code 2 = Expr( "..." );
sql_code 3 = Expr( "..." );
list = { "sql_code 1", "sql_code 2", sql_code 3" };
For( k = 1, k <= N Items( list ), k++,
sub_list = list[k];
Eval list( Parse( "var_" || sub_list ) ) = Execute SQL( database_connection, Eval(Parse(list)), invisible, "Data Table_" || sub_list );
);祝你有美好的一天
回复:用循環生成數據表的grips變量 @黑輪 ,
您的腳本有幾個問題。
- 實際的SQL應該是一個字符串/字符變量。
- 最後的項目清單缺少報價。
- 您試圖在For循環中生成的命令行中缺少概念
JMP分配的左側必須為左值 。本質上,L值必須是單詞或名稱,而不是表達式。
但是,我相信您正在嘗試創建一個JMP命令,其中分配的左側(=的左側)是一個名稱。
以下是來自“ JMP日誌”窗口的信息
Parse(Eval Insert( "\[var_^sub_list^ = Execute SQL( database_connection, ^list[k]^, invisible, "Data Table_^sub_list^")]\" )) ;
/*:
var_sql_code 1 = Execute SQL(
database_connection,
sql_code 1,
invisible,
"Data Table_sql_code 1"
)
第一行生成一個有效的JMP表達式。如果將其用作Eval()函數的參數,並且您的數據庫連接字符串和SQL代碼沒有錯誤,則查詢應該可以正常工作。 請參閱下面的腳本。
為了幫助您了解JSL功能,請從JMP主菜單> 救命 > 腳本編制索引 > 功能 ,抬頭:
- 評估插入()
- 解析()
- Eval(),和
- Execute SQL()的語法
sql_code 1 = "..." ;
sql_code 2 = "..." ;
sql_code 3 = "..." ;
list = { "sql_code 1", "sql_code 2", "sql_code 3" };
For( k = 1, k <= N Items( list ), k++,
sub_list = list[k];
Eval(Parse(Eval Insert( "\[var_^sub_list^ = Execute SQL( database_connection, ^list[k]^, invisible, "Data Table_^sub_list^")]\" )) ) ;
);
希望能有所幫助。祝好運!
回复:用循環生成數據表的grips變量除了遍歷所有表意為每個SQL結果表創建一個動態變量名稱之外,為什麼不創建表列表呢?特別是如果您的SQL語句很複雜。
sql_code 1 = Expr( "..." );
sql_code 2 = Expr( "..." );
sql_code 3 = Expr( "..." );
list = { "sql_code 1", "sql_code 2", "sql_code 3" };
dt_list = {};
For( k = 1, k <= N Items( list ), k++,
sql_statement = list[k];
dt_list[k] = Execute SQL( database_connection, sql_statement, invisible, "Data Table_" || char(k) );
);
如果希望SQL語句成為新創建的表的一部分,則可以將其添加為表變量。
回复:用循環生成數據表的grips變量 @黑輪 ,
我完全同意皮特的觀點, @pmroz 。表達式列表,列表列/變量,數據表名稱或引用列表以及列表項順序(k)相匹配,是易於閱讀和維護的代碼,建議您使用它。
回复:用循環生成數據表的grips變量是的 @pmroz @ gzmorgan0 列表絕對比將某些字符串解析為變量要好。
除非您對所有三個表都做同樣的事情,否則我什至不會將它們放在列表中。 我只是用描述性名稱來命名變量。 第二個示例減少了行數,易於理解,並為您提供了命名變量,因此您不必記住哪個表是1、2和3。
Names default to here(1);
sqllist = {
"SELECT *
FROM People",
"SELECT *
FROM Places",
"SELECT *
FROM Things"
};
table_names = {"People", "Places", "Things"};
dt_list = {};
for(i=1, i<=nitems(sqllist), i++,
dt_list[k] = Execute SQL(dbc, sqllist[i], table_names[i])
);
// vs
dt_people = Execute SQL(dbc,
"SELECT *
FROM People",
"People"
);
dt_places = Execute SQL(dbc,
"SELECT *
FROM Places",
"Places"
);
dt_things = Execute SQL(dbc,
"SELECT *
FROM Things",
"Things"
);
如果所有表都具有相同的架構,那麼我只需在列表中有一個sql語句列表,然後直接調用它即可。