IBM Books

OS/400 版管理及程式設計指南

資料類型注意事項

SQL 語言環境支援的下列資料類型需要特殊考量。

使用大型物件

您可以將大型物件檔案 (LOB) 儲存在 DB2 資料庫中, 然後使用 SQL 語言環境來存取它們, 供您的 Web 應用程式使用。

當 SQL 查詢在結果集合中傳回 LOB 時, SQL 語言環境不會將大型物件儲存在處理變數 (如 V1 或 V2) 的 Net.Data 表格中, 或儲存在 Net.Data 表格欄位中。相反地,當 Net.Data 發現 LOB 時, 它會將 LOB 儲存在 Net.Data 建立的檔案中。這個檔案位在 HTML_PATH 路徑架構變數所指定的目錄中。Net.Data 表格欄位及處理變數的表格將設定為該檔案的路徑。 僅執行 Net.Data 時所用的使用者 ID 方可存取這個檔案。

儲存 LOB 的檔案名稱是以動態方式建構的,具有下列格式:

名稱[.副檔名]

其中:

名稱
是識別大型物件的唯一字串

副檔名
是識別物件類型的字串。對於 CLOB 及 DBCLOB, 副檔名為 'txt'。對於 BLOB,SQL 語言環境會嘗試決定副檔名, 其方法是尋找 LOB 檔的前幾個位元組中的標記,因為它會指出 LOB 代表什麼。 SQL 語言環境可識別下列類型的資料 (括弧中的內容即是使用的副檔名):

如果無法識別 BLOB 的物件類型,將不會對檔名新增副檔名。

在巨集檔中參照 LOB 時,SQL 語言環境將使用下列語法傳回檔案名稱, 這個名稱會具有 LOB 檔案名稱前加的 /tmplobs/ 字串:

/tmplobs/名稱.[副檔名]

規劃要訣:當每一個查詢傳回 LOB 時, 會造成檔案將在 HTML_PATH 路徑架構變數指定的目錄中建立。 由於 LOB 會快速消耗資源,所以在使用 LOB 時,需考慮到系統限制問題。 您可能想要建立批次程式,定期清除目錄建議您最好使用 DataLinks,因為它不需要透過 SQL 語言環境, 將檔案儲存在目錄中,因而造成更佳的效能,且使用更少的系統資源。

範例:應用程式使用者必須按一下檔名,方可呼叫檢視器, 因為應用程式使用 MPEG 音效 (.MPA) 檔。 SQL 語言環境不認得此種檔案類型,因此會使用 EXEC 變數,將副檔名附加至檔案中。

%DEFINE{
lobpath = "@DTW_RGETINIDATA("HTML_PATH")"
filename = "@DTW_RREPLACE($(V3), "/tmplobs/", "", "1", "F")"
myFile=%EXEC "REN '$(lobpath)/$(filename)'  '$(filename).mpa'"
%}
%{ 其中更名是您的作業系統中的更名指令 %}
%FUNCTION(DTW_SQL) queryData() {
SELECT Name, IDPhoto, Voice FROM RepProfile
%REPORT{
<P>底下是您選取的資訊:<P>
%ROW{
$(myFile)
$(V1) Voice sample <IMG SRC="$(V2)">
<A HREF="$(V3).mpa")>Voice sample</A><P>
%}
%}
%}
 
%HTML(REPORT){
@queryData()
%}

queryData 函數會傳回下列 HTML 輸出:

<P>Here are the images you selected:<P>
Kinson Yamamoto
<IMG SRC="/tmplobs/p2345n1.gif">
<A HREF="/tmplobs/p2345n2.mpa">Voice sample</A><P>
Merilee Lau
<IMG SRC="/tmplobs/p2345n3.gif">
<A HREF="/tmplobs/p2345n4.mpa">Voice sample</A><P>

前一個範例中的 REPORT 區塊,使用隱含的表格變數 V1、V2、與 V3。

LOB 的存取權: 確定 Web 伺服器執行時所用的使用者 ID 對 HTML_PATH 指定的目錄具有寫入權。

編碼結果集合中的 DataLink URL

DataLink 資料類型是擴充可儲存在資料庫檔案的資料類型的基本建置區塊之一。透過 DataLink,儲存在直欄中的真正資料僅是檔案的指標。 這個檔案可以是任一檔案類型;影像檔、聲音記錄檔或文字檔。 DataLinks 會儲存一個 URL,來解析檔案的位置。

DATALINK 資料類型需要使用「DataLink 檔案管理程式」。 「DataLink 檔案管理程式」的詳細資訊,請參閱您的作業系統的 DataLink 文件。 在您使用 DATALINK 資料類型之前,您必須確定 Web 伺服器有權存取「DB2 檔案管理程式伺服器」管理的檔案系統。

當 SQL 查詢透過 DataLink 來傳回結果集合,且 DataLink 直欄是以具有 READ PERMISSION DB DataLink 選項的 FILE LINK CONTROL 來建立時,DataLink 直欄中的檔案路徑將含有存取符記。 DB2 會使用這個存取符記,來鑑定檔案的存取權。沒有這個存取符記, 所有存取檔案的嘗試將因違反權限而失敗。不過,存取符記可能含有在將傳回給瀏覽器的 URL 中無法使用的字元,如分號 (;) 字元。 例如:

/datalink/pics/UN1B;0YPVKGG346KEBE;baibien.jpg

URL 無效,因為它含有分號 (;) 字元。若要使得 URL 有效, 則必須使用 Net.Data 內建函數 DTW_URLESCSEQ 來編碼分號。不過, 在引用這個函數之前,必須先執行某些字串操作,因為這個函數也會編碼斜線 (/)。

您可以撰寫 Net.Data MACRO_FUNCTION,使字串操作自動化, 並使用 DTW_URLESCSEQ 函數。請在每一個從 DATALINK 資料類型直欄取回資料的巨集中使用這個技術。

範例 1:自動編碼從 DB2 UDB 傳回的 URL 的 MACRO_FUNCTION

%{ 執行:將 DTW_URLESCSEQ 引用到 DATALINK URL,使它成為有效的 URL。
    輸入:來自 DB2 檔案管理程式直欄的 DATALINK URL。
    傳回:具有符記部份的 URL 是已編碼的 URL
%}
%MACRO_FUNCTION encodeDataLink(in DLURL) {                        
  @DTW_rCONCAT( @DTW_rDELSTR( DLURL, 
  @DTW_rADD(@DTW_rLASTPOS("/", DLURL), "1" ) ),
  @DTW_rURLESCSEQ( @DTW_rSUBSTR(DLURL,
  @DTW_rADD( @DTW_rLASTPOS("/", DLURL), "1" ) ) ) )
%}

在使用這個 MACRO_FUNCTION 後,已適當編碼了 URL, 且可以在 Web 瀏覽器上參照 DATALINK 直欄中指定的檔案。

範例 2:指定將傳回 DATALINK URL 的 SQL 查詢的 Net.Data 巨集

    
 %FUNCTION(DTW_SQL) myQuery(){
  select name, DLURLCOMPLETE(picture) from myTable where name like '%river%'
%REPORT{ 
%ROW{ 
      <p> $(V1) <br> 
      Before Encoding: $(V2) <br> 
      After Encoding: @encodeDataLInk($(V2)) <br> 
      Make HREF: <a href="@encodeDataLink($(V2))"> click here </a> <br> <p> 
    %}
  %}
%}

請注意,將使用「DataLink 檔案管理程式」函數。這個函數 dlurlcomplete 會傳回完整的 URL。


[ 頁面頂端 | 前一頁 | 下一頁 | 目錄 | 索引 ]