[英]How to get column_name and table_name from DML statement?
我正在建立一種模擬數據庫操作的算法。
我有一個問題,如何從DML語句獲取表名和列名?
即:
string = "SELECT id,name FROM USER_TBL"
string TABLE_NAME = getTableName(string); //this will return "USER_TBL"
array COLUMN_NAME = getColumnNames(string); //this will return ["id","name"]
如果我將這些視為字符串操作,如何設計算法來獲取表名和列名?
目前,我使用以下邏輯,
function getTableName(iString){
//find string between "FROM " to next " "(space) and return it
}
function getColumnNames(string){
//get string between "SELECT " and " FROM" and split string based on "," (comma) and return it
}
我想知道是否有任何算法可用於此(供參考)? 除這些以外,我還需要處理什么情況?
我不知道算法,但是我想到了一些事情:表名-表名可以有別名,但是邏輯上應該可以-您可以在數據庫名(dbname.tblname)之前加上前綴->這樣在返回字符串之前,您可能需要查找點-Tablename可以是派生表->放在方括號中的select語句。 在這種情況下,表名派生實際上並不簡單
列名-列名可以有別名,不確定要如何處理。 -關於計算,條件(何時…)->不僅是列名,而且是組合值或計算值。 在這種情況下,沒有要檢索的實際列名-您還可以在結果集中為單個列選擇語句
因此,總的來說,如果sql查詢中沒有復雜性,則您的方法有效,如果是,則您的邏輯可能不會返回您想要的結果。
那么其他語句(例如UPDATE和INSERT)呢? 您還想解析嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.