zoukankan      html  css  js  c++  java
  • 如何在各种环境中处理多成员的物理文件

     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)
  • 相关阅读:
    (Java实现) 洛谷 P1106 删数问题
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1106 删数问题
    目测ZIP的压缩率
  • 原文地址:https://www.cnblogs.com/wildfish/p/1032034.html
Copyright © 2011-2022 走看看