SQL是與平台無關的資料庫操作語言,雖然它無法處理iSeries上包含多成員的物理檔案(表),但是它與RPG/COBOL一樣,是可以處理寫入資料庫檔案的物理檔案成員。所以,您可以通過命令OVRDBF和SQL一起來處理多成員的物理檔案:
OVRDBF FILE( name ) TOFILE( toname ) MBR( name ) OVRSCOPE( *JOB )
這裡有幾點值得注意的地方:
1. 您只能OVERRIDE一個成員,而不是所有成員;
2. 參數OVRSCOPE( *JOB )保證了OVERRIDE的動作即使在不同的activation group中執行,也能被識別;
3. 建議使用參數OVRSCOPE( *JOB ),除非您希望明確的限定OVERRIDE的範圍。
要解除OVERRIDE,請使用命令DLTOVR:
DLTOVR FILE( name ) LVL( *JOB )
參數LVL的意義相當於OVRDBF命令中的參數OVRSCOPE,指定了OVERRIDE的範圍。
根據您使用SQL的不同方法,OVERRIDE成員的方法也不盡相同:
1. iSQL環境:
在iSQL環境中,最簡單的方法是在進入SQL環境之前在5250命令列運行命令OVRDBF,如果您已經進入了iSQL環境,您也可以使用以下的命令啟動5250命令列:
CALL QCMD
在執行完OVRDBF命令後,按F3就可以退出5250命令列,返回iSQL環境,注意,如果您指定的參數OVRSCOPE( *JOB ),系統仍然能夠識別您要OVERRIDE的內容。
2. 嵌入式SQL環境:
在嵌入式SQL環境中,要想OVERRIDE一個成員,就要使用QCMDEXC,舉例說明,在ILE RPG中,您定義的QCMDEXC原型為:
d runCommand pr extpgm( 'QCMDEXC' )
d command_ 999 const
d size_ 15p 5 const
d commandSize s 15p 5 inz( 999 )
接著, 在執行SQL語句之前運行以下的OVERRIDE:
/free
runCommand( 'OVRDBF FILE(name) TOFILE(name) ' 'MBR(name) OVRSCOPE(*JOB)': commandSize )
/end-free
3. ODBC/OLE DB環境:
3.1 通過預存程序調用來實現OVRDBF
在ODBC中是可以通過調用要啟動並執行命令的系統API來執行該命令。通過這種技術,就可以在執行SQL之前將您希望使用的成員使用OVRDBF命令來OVERRIDE。例如:
CALL QSYS.QCMDEXC('OVRDBF FILE(USER1) TOFILE(MYLIB/USER1) MBR(COMPANY) OVRSCOPE(*JOB)', 0000000066.00000)
其中:0000000066.00000分別是10位/5位的固定長度的十進位欄位,在例子中的值66是單引號中全部字元的長度,包括空格。注意:剩下的數字位必須為0。
下面的URL上有一個Visual Basic ODBC的例子,請參閱:
ftp://testcase.software.ibm.com/as400/fromibm/ApiSamples/
3.2 通過SQL別名來實現OVRDBF
在OS/200 R430及以上版本支援SQL有關別名的語句。為每一個您需要訪問的成員建立一個別名,並通過在ODBC中訪問這些別名來達到訪問不同成員的目的。由於別名是固定的,所以只需要建立一次,任何SQL工具,例如:iSQL,3.1中提到的ODBC常式,等等,都可以用來建立這些別名。例如:
CREATE ALIAS MYLIB.FILE1MBR1 FOR MYLIB.MYFILE(MBR1)
CREATE ALIAS MYLIB.FILE1MBR2 FOR MYLIB.MYFILE(MBR2)
建立了不同的別名後,PC上的應用就可以指定MYLIB.FILE1MBR1 或 MYLIB.FILE1MBR2 來訪問您想要訪問的成員了。
在ODBC中使用別名的注意事項:
1. 一個別名被ODBC目錄功能返回的類型是"ALIAS"。有一些應用可能不會把別名當成可用的表名顯示在資料庫中;
2. 即使物理檔案,庫不存在了,別名依然可以獨立存在(類似於符號串連);
3. 在SQL語句中使用別名參照的成員是有一些限制的,具體內容參照DB2 for AS/400 SQL Reference (SC41-5612)
書中的詳細描述。
參考資料:
DB2 for AS/400 SQL Reference (SC41-5612)