const char *sqlite3_sql(sqlite3_stmt *pStmt); char *sqlite3_expanded_sql(sqlite3_stmt *pStmt); #ifdef SQLITE_ENABLE_NORMALIZE const char *sqlite3_normalized_sql(sqlite3_stmt *pStmt); #endif
如果預備敘述 P 是由 sqlite3_prepare_v2()、sqlite3_prepare_v3()、sqlite3_prepare16_v2() 或 sqlite3_prepare16_v3() 建立的,則 sqlite3_sql(P) 介面會傳回一個指向用於建立 預備敘述 P 的 UTF-8 SQL 文字副本的指標。sqlite3_expanded_sql(P) 介面會傳回一個指向包含已展開繫結參數的預備敘述 P 之 SQL 文字的 UTF-8 字串的指標。 sqlite3_normalized_sql(P) 介面會傳回一個指向包含正規化 SQL 文字的 UTF-8 字串的指標。用於正規化 SQL 敘述的語義未指定,且可能會變更。至少,字面值將會被適當的佔位符號取代。
例如,如果使用 SQL 文字 "SELECT $abc,:xyz" 建立預備敘述,並且參數 $abc 繫結到整數 2345,而參數 :xyz 未繫結,則 sqlite3_sql() 將會傳回原始字串 "SELECT $abc,:xyz",但 sqlite3_expanded_sql() 將會傳回 "SELECT 2345,NULL"。
如果沒有足夠的記憶體來儲存結果,或者結果超過由 SQLITE_LIMIT_LENGTH 確定的最大字串長度,則 sqlite3_expanded_sql() 介面會傳回 NULL。
編譯時期選項 SQLITE_TRACE_SIZE_LIMIT 會限制繫結參數展開的大小。編譯時期選項 SQLITE_OMIT_TRACE 會導致 sqlite3_expanded_sql() 永遠傳回 NULL。
sqlite3_sql(P) 和 sqlite3_normalized_sql(P) 傳回的字串由 SQLite 管理,並在預備敘述完成後自動釋放。另一方面,sqlite3_expanded_sql(P) 傳回的字串是從 sqlite3_malloc() 獲得的,必須由應用程式透過將其傳遞給 sqlite3_free() 來釋放。
只有在定義了編譯時期選項 SQLITE_ENABLE_NORMALIZE 的情況下,sqlite3_normalized_sql() 介面才可用。