如何在各种环境中处理多成员的物理文件
2008-01-09 15:00
281 查看
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/400 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)
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/400 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)
相关文章推荐
- [转]如何在各种环境中处理多成员的物理文件?
- Java多线程环境下如何高效安全处理数据(输入输出流、文件、网络等)(一)
- 如何打开没有*.sln工程文件的asp.net网站项目以及各种.net环境的项目
- Java多线程环境下如何高效安全处理数据(输入输出流、文件、网络等)(二)
- C#------如何处理缺少对公共可见类型或成员的xml注释的警告
- MDX技巧:如何处理、聚合多计算成员?
- 深度【文本分类】【关系抽取】模型中,如何读取并处理输出的训练文件(TXT格式)
- 如何查看linux系统中各种文件的系统类型
- 文件不存在抛出异常,如何处理
- unix环境高级编程-系统是如何设置文件权限的
- 如何处理 mka 格式的音频文件
- (原创)关于如何处理EXCEL( CSV)文件 导入数据库的解决方法!!
- ubuntu环境下如何建立可执行文件
- rac 环境数据文件误建到rac 节点本地处理
- 在开测试环境下,如何利用makecert.exe命令创建各种certificate
- 如何在头文件中定义静态数据成员(消除重复定义)
- iOS内存优化--大文件如何处理,内存映射
- dede仿站技巧:如何得到更好的相似度--css风格文件的处理
- linux下如何处理文件名含括号的文件
- 如何处理SQL2000数据库的xxx_Log.LDF文件