MySQL 9.0 版本注意事項
簡單陳述式會傳回一個結果集,可以用於存取資料(資料列)、中繼資料和診斷資訊。
簡單陳述式是靜態的,建立後無法修改;換句話說,它無法參數化。包含一個或多個 ?
參數標記的簡單陳述式會產生錯誤。請參閱第 27.3.7.2 節「預先處理陳述式」,以取得關於預先處理陳述式的資訊,其允許在執行時指定參數的任意值。
大多數在 MySQL 中有效的 SQL 陳述式都可以用作簡單陳述式;對於例外情況,請參閱儲存常式中不允許的 SQL 陳述式。以下顯示使用 JavaScript 簡單陳述式 API 的儲存程序之最小範例
CREATE PROCEDURE jssp_vsimple(IN query VARCHAR(250))
LANGUAGE JAVASCRIPT AS $$
let stmt = session.sql(query)
let result = stmt.execute()
console.log(result.getColumnNames())
let row = result.fetchOne()
while(row) {
console.log(row.toArray())
row = result.fetchOne()
}
$$;
此儲存程序採用單一輸入參數:SQL 陳述式的文字。我們透過將此文字傳遞給全域 Session
物件的 sql()
方法,來取得 SqlExecute
的執行個體。呼叫此執行個體的 execute()
方法會產生 SqlResult
;我們可以透過 getColumnNames()
取得此結果集中資料行的名稱,並透過呼叫 fetchOne()
來反覆查看其所有資料列,直到它無法傳回另一個資料列為止(也就是說,直到方法傳回 false
為止)。資料行名稱和資料列內容會使用 console.log()
寫入 stdout
。
我們可以使用 world
資料庫中兩個資料表的簡單聯結來測試此程序,然後檢查 stdout
,如下所示
mysql> CALL jssp_vsimple("
"> SELECT c.Name, c.LocalName, c.Population, l.Language
"> FROM country c
"> JOIN countrylanguage l
"> ON c.Code=l.CountryCode
"> WHERE l.Language='Swedish'
"> ");
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT mle_session_state('stdout')\G
*************************** 1. row ***************************
mle_session_state('stdout'): Name,LocalName,Population,Language
Denmark,Danmark,5330000,Swedish
Finland,Suomi,5171300,Swedish
Norway,Norge,4478500,Swedish
Sweden,Sverige,8861400,Swedish
1 row in set (0.00 sec)
單一簡單陳述式傳回的結果集不能大於 256 KB。