免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3443 | 回复: 6
打印 上一主题 下一主题

怎样用SQL/400,更新不同MEMBER中的数据? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-20 11:05 |只看该作者 |倒序浏览
有一个数据库有两个MEMBER:MEM1和MEM2,我想用STRSQL更新第二个MEMBER中的数据,怎么做啊?
STRSQL里的UPDATE中选择数据库文件时,好像没有MEMBER的选择,它默认是FIRST的。请高手指教!谢谢。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-01-20 11:44 |只看该作者

怎样用SQL/400,更新不同MEMBER中的数据?

strsql 前 先做一个数据库文件覆盖
OVRDBF FILE(FILENAME) MBR(MEM2)

论坛徽章:
0
3 [报告]
发表于 2005-01-20 11:48 |只看该作者

怎样用SQL/400,更新不同MEMBER中的数据?

听说用化名就可以做到访问多个MEMBER的 具体没用过

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-01-20 12:30 |只看该作者

怎样用SQL/400,更新不同MEMBER中的数据?

国鹏兄 说的是  alias
create alias qtemp/tmpfile for file(mem)
update qtemp/tmpfile set file='XXXX'
效果也差不多。

论坛徽章:
0
5 [报告]
发表于 2005-01-24 10:02 |只看该作者

怎样用SQL/400,更新不同MEMBER中的数据?

Thank you very much.

论坛徽章:
0
6 [报告]
发表于 2005-01-24 15:16 |只看该作者

怎样用SQL/400,更新不同MEMBER中的数据?

楼上的版主说的很有道理,OVRDBF以及在STRSQL用Create alias都可以映射其它Member,可见其功力深厚,佩服!佩服!
补充说明一点,用Create alias创建的目标实际上是一个DDMF。

论坛徽章:
0
7 [报告]
发表于 2005-01-27 19:46 |只看该作者

怎样用SQL/400,更新不同MEMBER中的数据?

补充完整。。。 :wink:  :wink:  :wink:

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)书中的详细描述。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP