文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


27.3.7.1 簡單陳述式

簡單陳述式會傳回一個結果集,可以用於存取資料(資料列)、中繼資料和診斷資訊。

簡單陳述式是靜態的,建立後無法修改;換句話說,它無法參數化。包含一個或多個 ? 參數標記的簡單陳述式會產生錯誤。請參閱第 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。