之前使用長資料類型的許多 API 函數,現在都是指定 sqlint32。 此外,這些函數中,有些現在都是採用 sqlint32 或 sqluint32 變數的指標, 來代替長變數或無正負號之長變數的指標。這些 API 函數的應用程式碼都必須變更, 因為 sqlint32 指標及長指標在 64 位元的 UNIX 型平台上不相容。
這些主變數的相關詳細資訊,請參閱 Application Development Guide。
若仍是在 32 位元機器上執行,請使用 LONGERROR 前置編譯選項來準備您的應用程式, 以移轉為 64 位元作業環境。在 32 位元 機器上,將 LONGERROR 設定為 YES, 如此每當前置編譯器遇到長類型的主變數時,就會傳回錯誤錯訊息。
若要將 32 位元應用程式移轉為 64 位元作業環境,請遵循下列步驟:
EXEC SQL BEGIN DECLARE SECTION; long y; /* this declaration generates an error on 64 bit */ sqlint32 x; /* this declaration is acceptable for 64 bit */ EXEC SQL END DECLARE SECTION;
在開發 64 位元應用程式時,務必要將下列限制及注意事項列入考量:
若要使您的 UDF 程式碼可以在 32 位元及 64 位元平台上移轉, 您必須變更您建立及使用含有 64 位元值之 scratchpad 的方法。 請勿宣告明確的長度變數給 scratchpad 結構,該結構包含一或數個 64 位元值, 如指標、long 變數或 sqlint64 變數。 例如,下列程式碼範例可能會導致 64 位元平台上發生資料並排異常狀況, 因為結構宣告包含明確的長度變數:
struct scratchpad_data { sqlint32 length; char chars[4]; sqlint64 bigint_var; };
為了要讓整個 DB2 系列中所有平台的 scratchpad 結構定義一致, UDF 的 sqludf_scratchpad::data 要與特定平台的對齊基準一致。 如果對齊作業對該 scratchpad 資料結構是重要的關鍵, 就可以使用沒有明確長度成員的 scratchpad 宣告。 執行此變更可確保與某些 DB2 大型電腦版本的一致性, 在這些大型電腦版本中,指標是依 16 位元來對齊的, 而不是依 32 位元安裝程式的 4 位元或 64 位元安裝程式的 8 位元。
若要從之前的範例來宣告 scratchpad 結構,使其能夠在 32 位元及64 位元平台之間移轉, 請將結構的明確長度變數宣告除去。 下列程式碼範例將宣告沒有宣告明確長度變數的 scratchpad 結構:
struct scratchpad_data { sqlint64 bigint_var; char chars[4]; };
若要存取沒有在您的 UDF 中宣告明確長度變數的 scratchpad 結構, 您可以用下列格式來參閱 scratchpad:
struct scratchpad_data * data = (struct scratchpad_data*)scratch_pointer->data;
其中 scratch_pointer 代表 UDF 的 sqludf_scratchpad 指標, data 代表 scratchpad 的內容。
特定平台 64 位元應用程式注意事項的相關資訊,請參訪下列網站。 這些網站包含一些針對硬體及作業系統的秘訣及建議, 所以不一定適合目前 DB2 或未來之 DB2 版次所支援的所有的 32 位元及 64 位元平台。 請注意,IBM 不為非 IBM 網站上的資訊來源負責。