BIND 指令
BIND 指令會呼叫連結公用程式,它會準備儲存在前置編譯器所產生之連結檔中的 SQL 陳述式,並建立儲存在資料庫中的套件。
範圍
此指令可以從 db2nodes.cfg中的任何資料庫分割區發出。 它會更新型錄資料庫分割區上的 資料庫 型錄。 所有資料庫分割區都可以看到其效果。
授權
- DBADM 權限
- 如果指定 EXPLAIN ONLY ,則 EXPLAIN 權限或隱含包括 EXPLAIN 的權限已足夠。
- 如果套件不存在,則下列其中一個專用權:
- 如果套件的綱目名稱不存在,則資料庫上的 BINDADD 及 IMPLICIT_SCHEMA 權限。
- 如果套件的綱目名稱確實存在:
- 綱目上的 SCHEMAADM 權限
- 綱目的 BINDADD 權限及 CREATEIN 專用權
- 如果套件存在,則具有下列其中一個專用權:
- 綱目上的 SCHEMAADM 權限
- 綱目的 ALTERIN 專用權
- 套件的 BIND 專用權
- 解譯表格的 INSERT 專用權
- DATAACCESS 權限
使用者也需要在應用程式中編譯任何靜態 SQL 陳述式所需的所有專用權。 授與群組的專用權不會用於靜態陳述式的授權檢查。
必要連線
資料庫。 如果啟用隱含連接,則會建立與預設資料庫的連線。
指令語法
- For Db2®
- For Db2 on servers other than Linux®, Windows and UNIX
- Notes:
- 1 If the server does not support the DATETIME DEF option, it is mapped to DATETIME ISO.
- 2 The DEGREE option is only supported by DRDA Level 2 Application Servers.
- 3 DRDA defines the EXPLAIN option to have the value YES or NO. If the server does not support the EXPLAIN YES option, the value is mapped to EXPLAIN ALL.
指令參數
- filename
- 指定應用程式前置編譯時產生的連結檔名稱,或包含數個連結檔名稱的清單檔。 連結檔的副檔名為
.bnd。 可以指定完整路徑名稱。如果指定清單檔,則 @ 字元必須是清單檔名稱的第一個字元。 清單檔可以包含數行連結檔名。 在同一行列出的連結檔必須以加號 (+) 字元區隔,但在每一行列出的第一個檔案前面或最後一個列出的連結檔之後,不能出現 +。 例如,
是包含下列連結檔的清單檔:/u/smith/sqllib/bnd/@all.lstmybind1.bnd+mybind.bnd2+mybind3.bnd+ mybind4.bnd+mybind5.bnd+ mybind6.bnd+ mybind7.bnd當只指定沒有任何路徑的連結檔名稱時,會先在現行目錄中搜尋檔案。 如果找到檔案,則會挑選該檔案,並建立套件。 如果在現行目錄中找不到檔案,則會自動從實例或安裝路徑中挑選該檔案。
- ACTION
- 指示是要新增或置換資料包。
- ADD
- 指出指名的套件不存在,且要建立新的套件。 如果套件已存在,則會停止執行,並傳回診斷錯誤訊息。
- REPLACE
- 指出現有套件將取代為具有相同套件名稱和建立者的新套件。 這是 ACTION 選項的預設值。
- RETAIN
- 指出在取代套件時是否要保留 BIND 及 EXECUTE 權限。 如果套件的所有權變更,新擁有者會將 BIND 及 EXECUTE 權限授與前一個套件擁有者。
- NO
- 取代套件時不保留 BIND 及 EXECUTE 權限。 Db2不支援此值。
- YES
- 置換套件時保留 BIND 及 EXECUTE 權限。 這是預設值。
- REPLVER version-id
- 取代套件的特定版本。 版本 ID 指定要取代的套件版本。 如果指定的版本不存在,則會傳回錯誤。 如果未指定 REPLACE 的 REPLVER 選項,且已存在符合所連結套件的套件名稱、建立者及版本的套件,則會取代該套件; 如果未指定,則會新增套件。
- APREUSE
- 指定是否要重複使用靜態 SQL 存取計劃。 當啟用此選項時,查詢編譯器會在連結期間及未來隱含及明確重新連結期間,嘗試在任何現有套件中重複使用陳述式的存取計劃。
- YES
- 查詢編譯器將嘗試重複使用套件中陳述式的存取計劃。 如果有現存的套件,查詢編譯器會嘗試對每個陳述式重複使用存取計劃,而這些陳述式可以與新連結檔中的陳述式相符。 要符合陳述式,陳述式文字必須相同,且現有套件中陳述式的區段編號必須符合新套件中陳述式的區段編號。
- NO
- 查詢編譯器不會嘗試重複使用套件中陳述式的存取計劃。 此為預設值。
- BLOCKING
- 指定游標的橫列區塊傳輸類型。 在分割的資料庫環境中,也支援封鎖包含 LOB 直欄資料類型參照的列資料。
- ALL
- 對於以 FOR READ ONLY 子句指定的游標或未指定為 FOR UPDATE 的游標,會發生區塊傳輸。
不明確游標被視為唯讀。
- NO
- 任何游標都不會出現區塊傳輸。
如需唯讀游標及不明確游標的定義,請參閱 DECLARE CURSOR 陳述式。
不明確游標被視為可更新。
- UNAMBIG
- 對於使用 FOR READ ONLY 子句指定的游標,會發生封鎖。
未以 FOR READ ONLY 或 FOR UPDATE 子句宣告且不明確且唯讀的游標將被封鎖。 不明確游標將不會被封鎖。
不明確游標被視為可更新。
- BUSTIMESENSITIVE
- 指出靜態及動態 SQL 陳述式中應用程式期間時間表格的參照是否受 CURRENT TEMPORAL BUSINESS_TIME 特別暫存器的值影響。
- YES
- 應用程式期間時間表格的參照會受到 CURRENT TEMPORAL BUSINESS_TIME 特別暫存器的值影響。 此值為預設值。
- NO
- 應用程式期間時間表格的參照不受 CURRENT TEMPORAL BUSINESS_TIME 特別暫存器的值影響。
- CCSIDG double-ccsid
- 一個整數,指定在 CREATE 及 ALTER TABLE SQL 陳述式的字元直欄定義 (不含特定 CCSID 子句) 中,要用於雙位元組字元的編碼字集 ID (CCSID)。 Db2的伺服器不支援此選項。 如果未指定此選項,則 DRDA 伺服器將使用內建預設值。
- CCSIDM mixed-ccsid
- 一個整數,指定在 CREATE 及 ALTER TABLE SQL 陳述式的字元直欄定義 (不含特定 CCSID 子句) 中,要用於混合位元組字元的編碼字集 ID (CCSID)。 Db2的伺服器不支援此選項。 如果未指定此選項,則 DRDA 伺服器將使用內建預設值。
- CCSIDS sbcs-ccsid
- 一個整數,指定在 CREATE 及 ALTER TABLE SQL 陳述式的字元直欄定義 (不含特定 CCSID 子句) 中,要用於單位元組字元的編碼字集 ID (CCSID)。 Db2不支援此選項。 如果未指定此選項,則 DRDA 伺服器將使用內建預設值。
- CHARSUB
- 指定要用於 CREATE 及 ALTER TABLE SQL 陳述式中的直欄定義的預設字元子類型。 Db2的伺服器不支援此前置編譯/bind 選項。
- BIT
- 在未指定明確子類型的所有新字元直欄中使用 FOR BIT DATA SQL 字元子類型。
- DEFAULT
- 在未指定明確子類型的所有新字元直欄中使用目標內建預設值。
- MIXED
- 在未指定明確子類型的所有新字元直欄中使用 FOR MIXED DATA SQL 字元子類型。
- SBCS
- 在未指定明確子類型的所有新字元直欄中使用 FOR SBCS DATA SQL 字元子類型。
- CLIPKG cli-packages
- 介於 3 到 30 之間的整數,指定針對資料庫連結 CLI 連結檔案時要建立的 CLI 大型套件數目。
- CNULREQD
- 此選項與 LANGLEVEL 前置編譯選項相關。 此選項只有在從 C 或 C++ 應用程式建立連結檔時才有效。 Db2的伺服器不支援此連結選項。
- NO
- 應用程式是以 LANGLEVEL SAA1 前置編譯選項為基礎撰寫的,與 C 字串主變數中的空值終止符相關。
- YES
- 應用程式是根據與 C 字串主變數中空值終止符相關的 LANGLEVEL MIA 前置編譯選項來撰寫的。
- COLLECTION schema-name
- 指定套件的 128 位元組集合 ID。 如果未指定,則會使用處理套件的使用者授權 ID。
- CONCURRENTACCESSRESOLUTION
- 指定要用於套件中陳述式的並行存取解析。
- USE CURRENTLY COMMITTED
- 指定當正在更新或刪除資料時,資料庫管理程式可以使用目前已確定的資料版本來進行適當的掃描。 可以跳過正在插入的橫列。 當有效的隔離層次是「游標穩定性」或「讀取穩定性」時 (若為「讀取穩定性」,則只會跳過未確定的插入項目) ,否則會忽略此子句。 適用的掃描包括唯讀掃描,可以是唯讀陳述式的一部分,也可以是非唯讀陳述式。 登錄變數 DB2_EVALUNCOMMITTED、 DB2_SKIPDELETED和 DB2_SKIPINSERTED 的設定不適用於使用目前確定的掃描。 不過,這些登錄變數的設定仍會套用至目前未使用確定的掃描。
- WAIT FOR OUTCOME
- 指定當在更新或刪除程序中遇到資料時,「游標穩定性」及更高的掃描會等待確定或回復。 不會跳過正在插入的處理程序中的列。 登錄變數 DB2_EVALUNCOMMITTED、 DB2_SKIPDELETED及 DB2_SKIPINSERTED 的設定不再適用。
- DATETIME
- 指定要使用的日期和時間格式。
- DEF
- 使用與資料庫專屬區碼相關聯的日期和時間格式。
- EUR
- 使用 IBM 標準歐洲日期和時間格式。
- ISO
- 使用國際標準組織的日期和時間格式。
- JIS
- 使用「日本工業標準」的日期和時間格式。
- LOC
- 使用與資料庫專屬區碼相關聯的本端格式的日期和時間格式。
- USA
- 對於美國日期和時間格式,請使用 IBM 標準。
- DBPROTOCOL
- 指定連接至由三段式名稱陳述式所識別的遠端站台時要使用的通訊協定。 僅受 Db2 for z/OS® 支援。 如需受支援選項值的清單,請參閱 Db2 for z/OS的文件。
- DEC
- 指定小數運算表示式作業中的最大精準度。 Db2的伺服器不支援此前置編譯/bind 選項。 如果未指定此選項,則 DRDA 伺服器將使用內建預設值。
- 15
- 在十進位算術運算中使用 15 位數精準度。
- 31
- 在十進位算術運算中使用 31 位數精準度。
- DECDEL
- 指定是否使用句點 (.) 或逗點 (,) 作為小數點及浮點文字中的小數點指示器。 Db2的伺服器不支援此前置編譯/bind 選項。 如果未指定此選項,則 DRDA 伺服器將使用內建預設值。
- COMMA
- 使用逗點 (,) 作為小數點指示器。
- PERIOD
- 使用句點 (.) 作為小數點指示器。
- DEGREE
- 指定 SMP 系統中執行靜態 SQL 陳述式的平行化程度。 此選項並不會影響 CREATE INDEX 的平行化。
- 1
- 陳述式的執行將不會使用平行化。
- degree-of-parallelism
- 指定可執行陳述式的平行化程度,這是介於 2 到 32 767 (含) 之間的值。
- ANY
- 指定使用 資料庫管理程式所決定的程度來執行陳述式可能涉及平行化。
- DYNAMICRULES
- 對於在動態 SQL 執行期內,授權 ID 所使用的原始設定值,以及未限定物件參照的隱含式限定元,定義哪些規則適用。
- RUN
- 指定執行套件之使用者的授權 ID 將用於動態 SQL 陳述式的授權檢查。 授權 ID 也將用作預設套件限定元,以在動態 SQL 陳述式中隱含地限定不完整的物件參照。 這是預設值。
- BIND
- 指定在執行時期使用套用至授權及資格的靜態 SQL 的所有規則。 亦即,套件擁有者的授權 ID 將用於動態 SQL 陳述式的授權檢查,而預設套件限定元將用於動態 SQL 陳述式中不完整物件參照的隱含限定。
- DEFINERUN
- 如果在常式環境定義內使用套件,則常式定義者的授權 ID 將用於授權檢查及常式內動態 SQL 陳述式內不完整物件參照的隱含資格。
如果套件用作獨立式應用程式,則會處理動態 SQL 陳述式,如同套件與 DYNAMICRULES RUN連結一樣。
- DEFINEBIND
- 如果在常式環境定義內使用套件,則常式定義者的授權 ID 將用於授權檢查及常式內動態 SQL 陳述式內不完整物件參照的隱含資格。
如果套件用作獨立式應用程式,則會如同套件與 DYNAMICRULES BIND連結一樣處理動態 SQL 陳述式。
- INVOKERUN
- 如果在常式環境定義內使用套件,則呼叫常式時有效的現行陳述式授權 ID 將用於動態 SQL 陳述式的授權檢查,以及該常式內動態 SQL 陳述式內不完整物件參照的隱含資格。
如果套件用作獨立式應用程式,則會處理動態 SQL 陳述式,如同套件與 DYNAMICRULES RUN連結一樣。
- INVOKEBIND
- 如果在常式環境定義內使用套件,則呼叫常式時有效的現行陳述式授權 ID 將用於動態 SQL 陳述式的授權檢查,以及該常式內動態 SQL 陳述式內不完整物件參照的隱含資格。
如果套件用作獨立式應用程式,則會如同套件與 DYNAMICRULES BIND連結一樣處理動態 SQL 陳述式。
因為動態 SQL 陳述式將在具有連結行為的套件中使用套件擁有者的授權 ID ,所以套件的連結程式不應具有套件使用者不應該接收的任何權限。 同樣地,當定義將展現定義行為的常式時,常式的定義者不應擁有套件使用者不應該接收的任何權限,因為動態陳述式將使用常式定義者的授權 ID。
下列動態備妥 SQL 陳述式無法在未與 DYNAMICRULES RUN連結的套件內使用 :GRANT、REVOKE、ALTER、CREATE、DROP、COMMENT ON、RENAME、SET INTEGRITY 及 SET EVENT MONITOR STATE。
- ENCODING
- 指定計劃或套件中靜態陳述式中所有主變數的編碼。 僅受 Db2 for OS/390® 支援。 如需受支援選項值的清單,請參閱 Db2 for OS/390的文件。
- EXPLAIN
- 在 Explain 表格中儲存針對套件中每一個 SQL 陳述式所選擇的存取計劃的相關資訊。
- NO
- 將不會擷取解譯資訊。
- YES
- 在靜態陳述式的準備/bind 時間及漸進式連結陳述式的執行時期,解譯表格將移入所選擇存取計劃的相關資訊。
如果套件要用於常式,且套件包含漸進式連結陳述式,則常式必須定義為 MODIFIES SQL DATA。 如果未執行此動作,則套件中的漸進式連結陳述式會導致執行時期錯誤 (SQLSTATE 42985)。
- REOPT
- 在執行時期,會將每一個可重新最佳化的漸進式連結 SQL 陳述式的解譯資訊放置在解譯表格中。 此外,即使 CURRENT EXPLAIN MODE 暫存器設為 NO ,也會在執行時期收集可重新最佳化動態 SQL 陳述式的解譯資訊。
如果要將套件用於常式,則常式必須定義為 MODIFIES SQL DATA ,否則套件中的漸進式連結及動態陳述式會導致執行時期錯誤 (SQLSTATE 42985)。
- ONLY
- ONLY 選項可讓您在沒有專用權執行陳述式的情況下解譯陳述式。 已移入解譯表格,但未建立持續性套件。 如果在連結處理程序期間發現具有相同名稱及版本的現有套件,則即使您指定 ACTION REPLACE,也不會捨棄或取代現有套件。 如果在移入解譯表格期間發生錯誤,則不會針對傳回錯誤的陳述式及其後任何陳述式新增解譯資訊。
- ALL
- 每一個合格靜態 SQL 陳述式的解譯資訊將在準備/bind 時間放置在「解譯」表格中。 每一個合格漸進式連結 SQL 陳述式的解譯資訊將在執行時期放置在解譯表格中。 此外,即使 CURRENT EXPLAIN MODE 暫存器設為 NO ,也會在執行時期收集合格動態 SQL 陳述式的解譯資訊。
如果要將套件用於常式,則常式必須定義為 MODIFIES SQL DATA ,否則套件中的漸進式連結及動態陳述式會導致執行時期錯誤 (SQLSTATE 42985)。
- EXPLSNAP
- 在解譯表格中儲存解譯 Snapshot 資訊。
- NO
- 將不會擷取「解譯 Snapshot」。
- YES
- 每一個合格靜態 SQL 陳述式的「解譯 Snapshot」會在靜態陳述式的準備/bind 時間及漸進式連結陳述式的執行時期放置在「解譯」表格中。
如果套件要用於常式,且套件包含漸進式連結陳述式,則常式必須定義為 MODIFIES SQL DATA ,或套件中的漸進式連結陳述式會導致執行時期錯誤 (SQLSTATE 42985)。
- REOPT
- 每一個可重新最佳化的漸進式連結 SQL 陳述式的解譯 Snapshot 資訊會在執行時期放置在解譯表格中。 此外,即使 CURRENT EXPLAIN SNAPSHOT 暫存器設為 NO ,也會在執行時期收集可重新最佳化動態 SQL 陳述式的解譯 Snapshot 資訊。
如果要將套件用於常式,則常式必須定義為 MODIFIES SQL DATA ,否則套件中的漸進式連結及動態陳述式會導致執行時期錯誤 (SQLSTATE 42985)。
- ALL
- 每一個合格靜態 SQL 陳述式的「解譯 Snapshot」將在準備/bind 時間放置在「解譯」表格中。 每一個合格漸進式連結 SQL 陳述式的解譯 Snapshot 資訊將在執行時期放置在「解譯」表格中。 此外,即使 CURRENT EXPLAIN SNAPSHOT 暫存器設為
NO,也會在執行時期收集合格動態 SQL 陳述式的解譯 Snapshot 資訊。如果要將套件用於常式,則必須將常式定義為 MODIFIES SQL DATA ,否則套件中的漸進式連結及動態陳述式會導致執行時期錯誤 (SQLSTATE 42985)。
- EXTENDEDINDICATOR
- 在執行相關聯的計劃或套件期間,啟用延伸指示器變數值的識別。
- NO
- 無法辨識延伸指示器變數值。 指標變數是一般指標變數; 負指標變數值表示空值,正或零值表示非空值。 這是預設條件。
- YES
- 可辨識延伸指示器變數值。 使用任何無法辨識的指示器變數值,或在不支援的位置中使用預設或未指派的指示器變數型值,將導致 Db2 資料庫管理程式在執行連結陳述式期間產生錯誤訊息。
- FEDERATED
- 指定套件中的靜態 SQL 陳述式是否參照暱稱或聯合視圖。 如果未指定此選項,且套件中的靜態 SQL 陳述式參照暱稱或聯合視圖,則會傳回警告並建立套件。
- NO
- 在套件的靜態 SQL 陳述式中未參照暱稱或聯合視圖。 如果在此套件的準備或連結階段期間,在靜態 SQL 陳述式中發現暱稱或聯合視圖,則會傳回錯誤,且 不會 建立套件。
- YES
- 在套件的靜態 SQL 陳述式中可以參照暱稱或聯合視圖。 在準備或連結套件期間,如果在靜態 SQL 陳述式中未發現暱稱或聯合視圖,則不會傳回任何錯誤或警告,且會建立套件。
- FEDERATED_ASYNCHRONY
- 針對使用內嵌式 SQL 的程式,指定聯合伺服器在存取計劃中支援的非同步表格佇列 (ATQ) 數目上限。
- ANY
- 最佳化工具會決定存取計劃的 ATQ 數目。 最佳化工具會將 ATQ 指派給計劃中所有合格的 SHIP 或遠端下推操作員。 指定給 DB2_MAX_ASYNC_REQUESTS_PER_QUERY 伺服器選項的值會限制非同步要求的數目。
- number_of_atqs_in_the_plan
- 計劃中的 ATQ 數目。 您指定範圍 0 到 32767之間的數字。
- FUNCPATH
- 指定在靜態 SQL 中解析使用者定義的特殊類型和函數時要使用的函數路徑。 如果未指定此選項,則預設函數路徑為 "SYSIBM"、"SYSFUN"、USER ,其中 USER 是 USER 特別暫存器的值。
- schema-name
- 一般或定界的 SQL ID ,可識別存在於應用程式伺服器中的綱目。 在前置編譯或連結時不會進行綱目存在的驗證。 相同的綱目在函數路徑中不能出現多次。 無法指定函數路徑的綱目名稱 SYSPUBLIC。 可指定的綱目數目受結果函數路徑的長度限制,該長度不能超過 2048 個位元組。 SYSIBM 綱目不需要明確指定; 如果函數路徑中未包含它,則會隱含地假設它是第一個綱目。
- GENERIC "string"
- 支援連結套件與目標伺服器所支援但未在 BIND PACKAGE 或 REBIND PACKAGE 指令中預先定義的連結選項。 請勿使用 GENERIC 連結選項來指定 BIND 或 PRECOMPILE 指令語法中預先定義的連結選項。 例如,請勿在 GENERIC 連結選項中指定預先定義的連結選項,例如 KEEPDYNAMIC 。 GENERIC 連結選項的語法如下:
generic "option1 value1 option2 value2 ..."每一個選項和值必須以一或多個空格區隔。 例如,您可以使用下列 GENERIC 連結選項語法,來連結具有 OPT1、 OPT2及 OPT3 選項值的套件:generic "opt1 value1 opt2 value2 opt3 value3"字串的長度上限為 4096 個位元組。 字串中每一個選項名稱的長度上限為 255 個位元組。
用戶端會將 BIND 指令傳遞至 Db2 伺服器,而不進行任何用戶端驗證。 Db2 伺服器會處理 BIND 指令並傳回適當訊息。
在 10.5 版 Fix Pack 2 以及更新版本中,當您連接至 Db2 for z/OS 第 11 版以及更新版本伺服器時,可以使用 BIND 指令的 GENERIC 選項來指定應用程式相容性特別暫存器設定 (APPLCOMPAT)。
如需 Db2 for z/OS 伺服器支援的 GENERIC 選項清單,請參閱
來自 Db2 用戶端的 Db2 for z/OS 連結選項規格
。如需 Db2 for IBM® i 伺服器所支援的 GENERIC 選項清單,請參閱
如何不同於用戶端置換套件選項 (例如 NLSS 排序順序、系統命名及個別日期/時間格式)?
中的表 1。 - GRANT
- 附註: 如果指定多個 GRANT、 GRANT_GROUP、 GRANT_USER及 GRANT_ROLE 選項,則只會執行最後一個指定的選項。
- authid
- 將 EXECUTE 和 BIND 專用權授與指定的使用者名稱、角色名稱或群組 ID。 如果未提供 USER、GROUP 或 ROLE 來指定 GRANT 陳述式上被授權者的類型,則會使用 SQL GRANT 陳述式及其規則來判定 authid 的類型。 如需規則,請參閱 GRANT (角色) 陳述式。
- PUBLIC
- 將 EXECUTE 及 BIND 專用權授與 PUBLIC。
- GRANT_GROUP group-name
- 將 EXECUTE 和 BIND 專用權授與指定的群組名稱。
- GRANT_USER user-name
- 將 EXECUTE 和 BIND 專用權授與指定的使用者名稱。
- GRANT_ROLE role-name
- 將 EXECUTE 和 BIND 專用權授與指定的角色名稱。
- INSERT
- 容許針對 Db2 Enterprise Server Edition 伺服器進行前置編譯或連結的程式,以要求緩衝資料插入以提高效能。
- BUF
- 指定應該緩衝來自應用程式的插入項目。
- DEF
- 指定不應緩衝來自應用程式的插入項目。
- ISOLATION
- 決定連結至此套件的程式與其他執行中程式的隔離程度。
- CS
- 指定「游標穩定性」作為隔離層次。
- NC
- 不確定。 指定不使用確定控制。 Db2不支援此隔離層次。
- RR
- 指定「可重複讀取」作為隔離層次。
- RS
- 指定「讀取穩定性」作為隔離層次。 「讀取穩定性」可確保套件中 SQL 陳述式的執行與應用程式所讀取及變更之列的其他應用程式程序隔離。
- UR
- 指定「未確定的讀取」作為隔離層次。
- IMMEDWRITE
- 指出是否對群組緩衝池相依頁集或資料庫分割區所做的更新執行立即寫入。 僅受 Db2 for OS/390 支援。 如需受支援選項值的清單,請參閱 Db2 for OS/390的文件。
- KEEPDYNAMIC
此參數指定是否在確定點之後保留動態 SQL 陳述式。
如需 Db2 for z/OS支援的選項值清單,請參閱 Db2 for z/OS 文件。
從 Db2 9.8 版 Fix Pack 2 開始,您可以在不需要全新連結作業的情況下修改套件的 KEEPDYNAMIC 連結選項值,從而避免進行不必要的重新編譯,直到下一個連結作業發生為止。 KEEPDYNAMIC 連結選項控制與備妥陳述式相關聯的陳述式文字及區段在 SQL 環境定義中的保留時間,指定是否在 COMMIT 或 ROLLBACK 之後保留動態 SQL 陳述式。
- YES
指示 SQL 環境定義無限期保留與備妥陳述式相關聯的陳述式文字及區段。 動態 SQL 陳述式在交易之間保留。 依預設,所有以 KEEPDYNAMIC YES 連結的套件都與現有的套件快取行為相容。
- No
指示 SQL 環境定義在每一個工作單元結束時移除與備妥陳述式相關聯的陳述式文字及區段。 在 COMMIT 或 ROLLBACK 作業期間,會從 SQL 環境定義中移除與 KEEPDYNAMIC NO 連結之套件中準備的非作用中動態 SQL 陳述式。 必須在新交易中重新準備陳述式。 用戶端、驅動程式或應用程式需要重新準備要在新工作單元中重複使用的任何動態 SQL 陳述式。 如果套件由遠端應用程式執行,當交易結束時,備妥陳述式的可執行版本會與應用程式 SQL 環境定義取消關聯。
作用中動態 SQL 陳述式必須保留到下一個非作用中的 COMMIT 或 ROLLBACK 作業為止。 以下是動態 SQL 陳述式可以在交易界限上處於作用中的部分狀況:- 使用 WITH HOLD 選項所宣告的游標會在確定點開啟。
- 動態 SQL 陳述式正在執行 COMMIT 或 ROLLBACK 作業。
- 動態 SQL 陳述式呼叫正在執行 COMMIT 或 ROLLBACK 作業的儲存程序或使用者定義函數。
- MESSAGES message-file
- 指定警告、錯誤及完成狀態訊息的目的地。 不論連結是否成功,都會建立訊息檔案。 如果未指定訊息檔名,則會將訊息寫入標準輸出。 如果未指定檔案的完整路徑,則會使用現行目錄。 如果指定現有檔案的名稱,則會改寫檔案的內容。
- OPTHINT
- 控制是否將查詢最佳化提示用於靜態 SQL。 僅受 Db2 for OS/390 支援。 如需受支援選項值的清單,請參閱 Db2 for OS/390的文件。
- OPTPROFILE optimization-profile-name
- 指定要用於套件中所有靜態陳述式的現有最佳化設定檔名稱。 選項的預設值是空字串。 對於 CURRENT OPTIMIZATION PROFILE 特別暫存器為空值的 DML 陳述式動態準備,該值也會套用作為預設值。 如果指定的名稱不完整,則它是 SQL ID ,由 QUALIFIER 連結選項隱含地限定。
BIND 指令不會處理最佳化檔案,但只會驗證名稱的語法是否有效。 因此,如果最佳化設定檔不存在或無效,則在使用該最佳化設定檔最佳化 DML 陳述式之前,不會出現原因碼為 13 的 SQL0437W 警告。
- OS400NAMING
- 指定存取 Db2 for System i ® 資料時要使用的命名選項。 僅受 Db2 for System i 支援。 如需受支援選項值的清單,請參閱 Db2 for IBM i的文件。
- OWNER authorization-id
- 指定套件擁有者的 128 位元組授權 ID。 擁有者必須具有執行套件中包含的 SQL 陳述式所需的專用權。 只有具有 DBADM 權限的使用者才能指定非使用者 ID 的授權 ID。 預設值是前置編譯/bind 處理程序之呼叫程式的授權 ID。 SYSIBM、SYSCAT 及 SYSSTAT 不是此選項的有效值。 authorization-id 必須是使用者。 無法使用 OWNER 選項來指定角色或群組。
- PATH
- 指定在靜態 SQL 中解析使用者定義的特殊類型和函數時要使用的函數路徑。 如果未指定此選項,則預設函數路徑為 "SYSIBM"、"SYSFUN"、USER ,其中 USER 是 USER 特別暫存器的值。
- schema-name
- 一般或定界的 SQL ID ,可識別存在於應用程式伺服器中的綱目。 在前置編譯或連結時不會進行綱目存在的驗證。
- QUALIFIER qualifier-name
- 為套件中包含的不完整物件提供 128 位元組隱含式限定元。 不論是否明確指定 OWNER ,預設值都是擁有者的授權 ID。
- QUERYOPT optimization-level
- 指出套件中包含之所有靜態 SQL 陳述式的必要最佳化層次。 預設值為 5。 SET CURRENT QUERY OPTIMIZATION 陳述式說明可用的完整最佳化等級範圍。
- RELEASE
- 指出是在每一個 COMMIT 點釋放資源,還是在應用程式終止時釋放資源。 Db2不支援此 DRDA 前置編譯/bind 選項。 若為 Db2 for z/OS 第 10 版伺服器或更新版本,預設值為 DEALLOCATE。
- COMMIT
- 在每一個 COMMIT 點釋放資源。 用於動態 SQL 陳述式。
- DEALLOCATE
- 只有在應用程式終止時才釋放資源。
- SORTSEQ
- 指定要在 System i上使用的排序順序表。 僅受 Db2 for IBM i 支援。 如需受支援選項值的清單,請參閱 Db2 for System i的文件。
- SQLERROR
- 指示當發現錯誤時,是否建立資料包或連結檔案。
- CHECK
- 指定目標系統對要連結的 SQL 陳述式執行所有語法及語意檢查。 在此程序中不會建立套件。 如果在連結時發現具有相同名稱和版本的現有套件,則即使指定 ACTION REPLACE ,也不會捨棄或取代現有套件。
- CONTINUE
- 即使在連結 SQL 陳述式時發生錯誤,也會建立套件。 如果同時指定 VALIDATE RUN ,則可以在執行時期漸進式連結那些因授權或存在原因而無法連結的陳述式。 任何在執行時期執行它們的嘗試都會產生錯誤 (SQLCODE -525 , SQLSTATE 51015)。
- NOPACKAGE
- 如果發生錯誤,則不會建立套件或連結檔。
- REOPT
- 指定是否讓 Db2 在執行時期使用主變數、參數標記、廣域變數及特別暫存器的值來決定存取路徑。 有效值如下:
- NONE
- 包含主變數、參數標記、廣域變數或特別暫存器之給定 SQL 陳述式的存取路徑,將不會使用實數值來最佳化。 將使用這些變數的預設估計值,並快取計劃並隨後使用。 這是預設值。
- ONCE
- 在第一次執行查詢時,將使用主變數、參數標記、廣域變數或特別暫存器的實際值來最佳化給定 SQL 陳述式的存取路徑。 此計劃會快取並隨後使用。
- ALWAYS
- 一律會使用每次執行查詢時已知的主變數、參數記號、廣域變數或特別暫存器的值,來編譯及重新最佳化給定 SQL 陳述式的存取路徑。
- REOPT | NOREOPT VARS
- 這些選項已由 REOPT 一律 及 REOPT NONE取代; 不過,基於舊版相容性,仍支援這些選項。 指定是否要讓 Db2 在執行時期使用主變數、廣域變數、參數標記及特別暫存器的值來決定存取路徑。 僅受 Db2 for OS/390 支援。 如需受支援選項值的清單,請參閱 Db2 for OS/390的文件。
- SQLWARN
- 指出是從動態 SQL 陳述式編譯 (透過 PREPARE 或 EXECUTE IMMEDIATE) 傳回警告,還是從說明處理 (透過 PREPARE ...INTO 或 DESCRIBE)。
- NO
- SQL 編譯器不會傳回警告。
- YES
- 將從 SQL 編譯器傳回警告。
- STATICREADONLY
- 決定是否將靜態游標視為 READ ONLY 或 INSENSITIVE。
- NO
- 給定陳述式文字及 LANGLEVEL 前置編譯選項的設定,所有靜態游標都會採用正常產生的屬性。 這是預設值。
- YES
- 任何不包含 FOR UPDATE 或 FOR READ ONLY 子句的靜態游標都將被視為 READ ONLY。
- INSENSITIVE
- 任何不包含 FOR UPDATE 子句的靜態游標都將被視為 READ ONLY 及 INSENSITIVE。
- STRDEL
- 指定單引號 (') 或雙引號 (") 將用作 SQL 陳述式中的字串定界字元。 Db2的伺服器不支援此前置編譯/bind 選項。 如果未指定此選項,則 DRDA 伺服器將使用內建預設值。
- APOSTROPHE
- 使用撇號 (') 作為字串定界字元。
- QUOTE
- 使用雙引號 (") 作為字串定界字元。
- STRING_UNITS
- 指定在靜態 SQL 陳述式中使用沒有明確字串單元的字元及圖形資料類型時的字串單元。 預設值是根據資料庫的 string_units 資料庫配置參數設定。
- SYSTEM
- 在 Unicode 資料庫中,此設定具有下列效果:
- 未指定 CODEUNITS32 關鍵字而定義的 CHAR、VARCHAR 及 CLOB 資料類型將預設為 OCTETS。
- 未指定 CODEUNITS32 關鍵字而定義的 GRAPHIC、VARGRAPHIC 及 DBCLOB 資料類型將預設為 CODEUNITS16。
- 未指定 CODEUNITS32 關鍵字而定義的 CHAR、VARCHAR 及 CLOB 資料類型將預設為 OCTETS。
- GRAPHIC、VARGRAPHIC 及 DBCLOB 資料類型具有隱含的雙位元組字串單位。
- CODEUNITS32
- 此設定僅適用於 Unicode 資料庫,且具有下列效果:
- 未指定 BYTE 或 OCTETS 關鍵字而定義的 CHAR、VARCHAR 及 CLOB 資料類型將預設為 CODEUNITS32。
- 未指定 CODEUNITS16 關鍵字而定義的 GRAPHIC、VARGRAPHIC 及 DBCLOB 資料類型將預設為 CODEUNITS32。
- SYSTIMESENSITIVE
- 指出靜態及動態 SQL 陳述式中系統期間時間表格的參照是否受 CURRENT TEMPORAL SYSTEM_TIME 特別暫存區的值影響。
- YES
- 系統期間時間表格的參照會受到 CURRENT TEMPORAL SYSTEM_TIME 特別暫存區的值影響。 此值為預設值。
- NO
- 系統期間時間表格的參照不受 CURRENT TEMPORAL SYSTEM_TIME 特別暫存區的值影響。
- TEXT label
- 套件的說明。 長度上限為 255 個字元。 預設值為空白。 Db2的伺服器不支援此前置編譯/bind 選項。
- TRANSFORM GROUP
- 指定靜態 SQL 陳述式用來與主程式交換使用者定義結構化類型值的轉換群組名稱。 此轉換群組不用於動態 SQL 陳述式,或用於與外部函數或方法交換參數及結果。
- groupname
- 長度最多為 18 個位元組的 SQL ID。 群組名稱不能包含限定元字首,且不能以字首 SYS 開頭,因為這是保留給資料庫使用的。 在與主變數互動的靜態 SQL 陳述式中,要用於交換結構化類型值的轉換群組名稱如下:
- TRANSFORM GROUP 連結選項中的群組名稱 (如果有的話)
- 在原始前置編譯時間指定的 TRANSFORM GROUP prep 選項中的群組名稱 (如果有的話)
- DB2_PROGRAM 群組 (如果存在群組名稱為 DB2_PROGRAM 的給定類型的轉換)
- 如果不存在任何先前列出的條件,則不使用任何轉換群組。
在連結靜態 SQL 陳述式期間可能發生下列錯誤:- SQLCODE yyyyy, SQLSTATE xxxxx: 需要轉換,但未選取靜態轉換群組。
- SQLCODE yyyyy, SQLSTATE xxxxx: 選取的轉換群組不包含需要交換之資料類型的必要轉換 (若為輸入變數,則為 TO SQL ,若為輸出變數,則為 FROM SQL)。
- SQLCODE yyyyy, SQLSTATE xxxxx:FROM SQL 轉換的結果類型與輸出變數的類型不相容,或 TO SQL 轉換的參數類型與輸入變數的類型不相容。
- VALIDATE
- 決定 資料庫管理程式 何時檢查授權錯誤及物件找不到錯誤。 套件擁有者授權 ID 用於有效性檢查。
- BIND
- 在前置編譯/bind 時間執行驗證。 如果所有物件不存在,或未保留所有權限,則會產生錯誤訊息。 如果指定 SQLERROR 繼續 ,則儘管有錯誤訊息,仍會產生套件/bind 檔案,但錯誤的陳述式無法執行。
- RUN
- 在連結時嘗試驗證。 如果所有物件都存在,且已保留所有權限,則在執行時不會執行進一步檢查。
如果所有物件都不存在,或在前置編譯/bind 時未保留所有權限,則會產生警告訊息,且不論 SQLERROR 繼續 選項設定為何,都會順利連結套件。 不過,在前置編譯/bind 處理程序期間未通過這些檢查的 SQL 陳述式的權限檢查及存在性檢查可以在執行時重做。
範例
db2 bind myapp.bnd連結處理程序所產生的任何訊息都會傳送至標準輸出。
使用注意事項
使用 REOPT 選項並指定 ONCE 或 ALWAYS 值來連結套件,可能會變更靜態及動態陳述式編譯及效能。
連結可以作為應用程式原始檔的前置編譯處理程序的一部分來執行,也可以在稍後作為個別步驟來執行。 以個別程序來執行連結時,請使用 BIND 。
用來建立套件的名稱儲存在連結檔中,並以產生該套件的來源檔名為基礎 (會捨棄現有路徑或副檔名)。 例如,名為 myapp.sql 的經過前置編譯的原始檔會產生名為 myapp.bnd 的預設連結檔,以及名為 MYAPP 的預設套件名稱。 不過,在前置編譯時期,可以使用 BINDFILE 和 PACKAGE 選項來置換連結檔名稱和套件名稱。
將套件與尚未存在的綱目名稱連結,會導致隱含建立該綱目。 綱目擁有者是 SYSIBM。 已將綱目上的 CREATEin 專用權授與 PUBLIC。
BIND 在已啟動的交易下執行。 執行連結之後, BIND 會發出 COMMIT 或 ROLLBACK 來終止現行交易並啟動另一個交易。
如果發生嚴重錯誤或超過 100 個錯誤,則連結會停止。 如果發生嚴重錯誤,公用程式會停止連結,嘗試關閉所有檔案,並捨棄套件。
- BIND 選項 OWNER 的隱含或明確值將用於動態 SQL 陳述式的授權檢查。
- BIND 選項 QUALIFIER 的隱含或明確值將用作動態 SQL 陳述式中限定元物件的隱含式限定元。
- 特別暫存器 CURRENT SCHEMA 的值對資格沒有影響。
如果在單一連線期間參照多個套件,則那些套件所準備的所有動態 SQL 陳述式都會展現 DYNAMICRULES 選項針對該特定套件及其使用環境所指定的行為。
SQL0020W 訊息中顯示的參數已正確記錄為錯誤,將依訊息指示予以忽略。
如果發現 SQL 陳述式有錯誤,且已指定 BIND 選項 SQLERROR 繼續 ,則會將陳述式標示為無效。 為了變更 SQL 陳述式的狀態,必須發出另一個 BIND 。 隱含和明確重新連結將不會變更無效陳述式的狀態。 在以 VALIDATE RUN連結的套件中,根據在重新連結期間是否存在物件存在或權限問題,在隱含及明確重新連結之間,陳述式可以從靜態變更為增量連結,或從增量連結變更為靜態。
當連結套件時,會將角色授與用來連結套件的授權 ID ( OWNER 連結選項的值) 或 PUBLIC 的專用權納入考量。 將不會使用透過群組獲得的角色,其中用來連結套件的授權 ID 是成員。
若為內嵌式 SQL 程式,如果未明確指定連結選項,則會使用 federated_async 配置參數來連結套件中的靜態陳述式。 如果明確指定 FEDERATED_ASYNCHRONY 連結選項,則會使用該值來連結套件,而且該值也是特別暫存器的起始值。 否則,會使用資料庫管理程式配置參數的值作為特別暫存器的起始值。 只有在明確設定動態 SQL 時, FEDERATED_ASYNCHRONY 連結選項才會影響動態 SQL。
FEDERATED_ASYNCHRONY 連結選項的值記錄在 SYSCAT.PACKAGES 型錄表格中的 FEDERATED_ASYNTHRONY 直欄中。 未明確指定連結選項時,會使用 federated_async 配置參數的值,且型錄會針對 FEDERATED_ASYNCHRONY 直欄顯示 -2 值。
如果在連結套件時未明確指定 FEDERATED_ASYNCHRONY 連結選項,且隱含地或明確地重新連結此套件,則會使用 federated_async 配置參數的現行值來重新連結套件。
