Image、Audio 及 Video Extenders 管理與程式設計

傳輸大型物件

您可以使用各種方式,在應用程式和 DB2 資料庫之間傳輸大型物件,例如影像、音效片段及視訊片段。 所用的方法,是依物件的傳輸是在檔案或記憶體緩衝區上,而有所不同。 也依檔案是位於從屬站機器或資料庫伺服器機器中而定。

若物件是在表格和伺服器檔案之間傳輸

當您在資料庫表格和伺服器檔案之間傳輸物件時,請指定適當的 Extender UDF 要求中指定檔案路徑。 因為 Extender UDF 和檔案兩者皆在伺服器上,所以 Extender 能夠找出該檔案。 例如,在下列 SQL 陳述式中,內容位於伺服器檔案中的影像,是儲存於資料庫表格中:

EXEC SQL BEGIN DECLARE SECTION;
     long hvStorageType;
  EXEC SQL END DECLARE SECTION;
hvStorageType=MMDB_STORAGE_TYPE_INTERNAL;
EXEC SQL INSERT INTO EMPLOYEE VALUES(
      '128557',
      'Anita Jones',
        DB2Image(
         CURRENT SERVER,
          '/employee/images/ajones.bmp',
                   'ASIS',
        :hvStorageType,
          'Anita''s picture')
       );

若物件是在從屬站緩衝區中來回傳輸

Extender 無法直接存取記憶體緩衝區。若您想在從屬站機器的緩衝區上, 來回傳輸物件,則需要一種方法來完成,而不是指定緩衝區位置。 其中一種方法是透過主變數。 這種方法是一般在應用程式和 DB2 資料庫之間傳輸物件時所使用的。

定義和使用大型物件的主變數,其方式與傳統字元和數字物件相同。 您可在 DECLARE 區段中宣告主變數、指派要傳輸的值、或存取傳輸給它們的值。

宣告影像、音效或視訊資料的主變數時,請指定 BLOB 的資料類型。 當您使用 UDF 來儲存、擷取或更新物件時, 請指定適當的主變數當做 UDF 要求中的引數。 使用的格式,與 SQL 陳述式中指定的其它主變數相同。

例如,下列 SQL 陳述式宣告並使用一個主變數,稱為 hvaudio,來裁剪音效和傳 輸音效至資料庫:

EXEC SQL BEGIN DECLARE SECTION;
  SQL TYPE IS BLOB (2M) hvaudio;
  EXEC SQL END DECLARE SECTION;
EXEC SQL INSERT INTO EMPLOYEE VALUES(
      '128557',
      'Anita Jones',
        DB2Audio(
         CURRENT SERVER,
          :hvaudio,
                 'WAVE',
          CAST(NULL as LONG VARCHAR),
          'Anita''s voice')
       );

使用 LOB 定位器

例如音效和視訊片段之類的大型物件可能非常大,因此使用主變數來操作可能並非十分有效率。 使用 LOB 定位器在應用程式中操作 LOB,也許是一種較佳的方式。

LOB 定位器是主變數中儲存的一個小值 (4 位元組),供程式用來參照 DB2 資料庫中的大型 LOB。 您的程式透過 LOB 定位器操作 LOB 時,LOB 就如同儲存在一般主變數中一樣。差異在於不需要在資料庫伺服器和從屬站機器的應用程式之間傳輸 LOB。 例如,在資料庫表格中選取 LOB 時,該 LOB 仍保留在伺服器上,但 LOB 定位器會移至從屬站。

宣告 LOB 定位器是在 DECLARE 區段中,而使用方式與主變數相同。 宣告影像、音效或視訊資料的 LOB 定位器時,請指定 BLOB LOCATOR 的資料類型。例如,下列 SQL 陳述式宣告並使用一個 LOB 定位器 (稱為 video_loc),來從資料庫表格中擷取視訊剪輯︰

EXEC SQL BEGIN DECLARE SECTION;
  SQL TYPE IS BLOB_LOCATOR video_loc;
  EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT CONTENT(VIDEO)
     INTO :video_loc
      FROM EMPLOYEE
       WHERE NAME='Anita Jones';

UDF 使用 LOB 定位器:用以儲存、擷取及更新影像、 音效及視訊物件的 DB2 Extender,使用 LOB 定位器。 DB2 Extender V1 中的這些 UDF,並不使用 LOB 定位器,因此,無法處理大於 2 MB 的物件。 這項限制強迫使用者在區段中傳輸大於 2 MB 的物件。 因為現在這些 UDF 使用 LOB 定位器,所以就無 2 MB 的限制。

若物件是在從屬站檔案中來回傳輸

使用檔案參考變數,對從屬站 透過檔案參考變數,可讓您不須在應用程式中配置大型物件的緩衝區空間。 使用檔案參考變數和 UDF 時,DB2 會直接在檔案和 UDF 之間傳遞 BLOB 內容。

宣告檔案參考變數是在 DECLARE 區段中,而使用方式與主變數相同。 宣告影像、音效或視訊資料的檔案參考變數時,請指定 BLOB_FILE 的資料類型。 但是,不像含有物件內容的主變數,檔案參考變數會包含檔案名稱。 檔案的大小不能超過 UDF 的 BLOB 大小。

使用檔案參考變數來輸入和輸出,有著各種不同的選項。 在程式的檔案參考變數結構中,可以設定 FILE_OPTIONS 欄位來選擇您要的選項。 您可以選擇下列選項:

輸入的選項:

SQL_FILE_READ。此檔案可以開啟、讀取及關閉。檔案中的資料長度 (位元組),是在開啟檔案時決定。 檔案參考變數的 data_length 欄位,保留檔案的長度 (位元組)。

輸出的選項:

SQL_FILE_CREATE。此選項建立新的檔案 (若尚未存在)。若檔案已存在,則傳回錯誤訊息。檔案參考變數的 data_length 欄位,保留檔案的長度 (位元組)。
SQL_FILE_OVERWRITE。此選項建立新的檔案 (若尚未存在)。若檔案已存在, 則新資料會改寫檔案中的資料。檔案參考變數的 data_length 欄位,保留檔案的長度 (位元組)。
SQL_FILE_APPEND。此選項將輸出添加至已存在的檔案。 若檔案尚未存在,則建立新檔。檔案參考變數的 data_length 欄位,保留新增至檔案的資料長 度 (位元組),而不是檔案的總長度。

例如,下列陳述式宣告一個檔案參考變數,稱為 Img_file,並用來將影像 (其內容 位於從屬站檔案中) 儲存到資料庫表格內。請注意 FILE_OPTIONS 欄位中的 SQL_FILE_READ 指定:

EXEC SQL BEGIN DECLARE SECTION;
  SQL TYPE IS BLOB_FILE Img_file;
  EXEC SQL END DECLARE SECTION;
strcpy (Img_file.name,"/employee/images/ajones.bmp");
Img_file.name_length=strlen(Img_file.name);
Img_file.file_options=SQL_FILE_READ;
EXEC SQL INSERT INTO EMPLOYEE VALUES(
      '128557',
      'Anita Jones',
        DB2Image(
         CURRENT SERVER,
          :Img_file,
                   'ASIS',
          CAST(NULL as LONG VARCHAR),
          'Anita''s picture')
       );

傳輸物件時指定檔名

當您儲存、擷取或更新物件時,DB2 Extender 能讓您有彈性地指定檔名。

雖然可以指定完整的檔名 (亦即完整路徑後面接著檔名) 來進行儲存、擷取及更新作業, 但是建議您最好指定相對檔名。 在 AIX、HP-UX 及 Solaris 中,相對檔名即為不以斜線開頭的檔 名。 在 OS/2 及 Windows 中,相對檔名即為不以磁碟機字母、冒號及反斜線開頭的檔名。

若指定相對檔名,則 Extender 會使用不同從屬站和伺服器環境環境中的目錄規格來分辨檔名。完整的 路徑名稱包含前端部份及尾端部份,前者通常是關於裝載點,後者以唯一的方式來識別所需的檔案。尾端 路徑名稱指定於 UDF 中。環境變數提供一連串前端路徑名稱,於嘗試分辨相對檔名時作為搜尋 之用。 有關 DB2 Extender 用來分辨檔名的環境變數的資訊, 請參閱附錄 A, 設定 DB2 Extender 的環境變數

Extender 也會適當地轉換檔名格式。 當檔名傳遞到伺服器時,會轉換成適合伺服器作業系統的格式。例如,OS/2 檔名 c:\dir1\abc.bmp,在傳遞到 AIX 伺服器時,會被轉換成 /dir1/abc.bmp。


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