首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从PASE/Qshell中确定数据库关系?

如何从PASE/Qshell中确定数据库关系?
EN

Stack Overflow用户
提问于 2016-07-09 07:24:34
回答 3查看 131关注 0票数 0

我刚刚进入IBM上的PASE和Qshell的世界,还在学习解决问题的"shell方式“。

我正在尝试编写一个shell脚本,该脚本将删除给定库中与给定物理文件相关联的所有逻辑文件。操作系统是IBM i 7.2。在QSYS-land中,我可能会将物理文件DSPDBR到输出文件,然后读取输出文件并删除每个相关文件。你将如何在PASE或Qshell中做到这一点?我有几个想法,但它们似乎都过于复杂,而且我对shell脚本了解得越多,我找到的捷径就越多。

我的第一个想法是基本上复制上面的过程,做一些类似这样的事情,然后以某种方式使用SELECT的输出:

代码语言:javascript
复制
system "DSPDBR FILE(MYLIB/MYFILE) OUTPUT(*OUTFILE) OUTFILE(QTEMP/DSPDBR)"
db2 "select WHREFI from QTEMP/DSPDBR where WHRELI = 'MYLIB'"

(我现在看到QTEMP并不是一个临时库,但也许有一种方法可以解决这个问题。)

我的第二个想法是将DSPDBR语句的输出通过管道传输到awk之类的文件中,以提取逻辑文件名,并将其输出重定向到流文件(或shell变量?)。从那里,以某种方式使用此列表删除逻辑文件。

有没有更直接的方法?似乎无论答案是什么,在编写shell脚本以与QSYS命令和对象交互时,它都将是一个经常重复的模式。

EN

回答 3

Stack Overflow用户

发布于 2016-07-09 12:05:34

首先,您可以回顾一下Running SQL queries from PASE instead of QSH。db2实用程序是Qshell的一部分,而不是PASE。不幸的是,它背后的处理是基于ILE的,因此它不能直接在PASE (AIX运行时)环境中使用。链接问题提供了一种在两者之间架起桥梁的方法。

但是,直接在QShell中,您可以尝试以下内容:

代码语言:javascript
复制
db2 "SELECT substr(VIEW_NAME,1,18), substr(OBJECT_NAME,1,10),
       substr(OBJECT_SCHEMA,1,10), substr(VIEW_SCHEMA,1,10),
       substr(TABLE_NAME,1,18)
 FROM qsys2.sysviewdep
 WHERE OBJECT_SCHEMA = '<yourSchemaName>'"

SUBSTR()函数可能有用,也可能没用。这取决于你的名字长度,以及你是否想要限制他们。输出可以重定向到输出文件,也可以通过管道传输到sed或其他实用程序中进行操作。

票数 1
EN

Stack Overflow用户

发布于 2016-07-12 00:34:00

特定于的QTEMP库的作用域是在shell中实现请求的进程。确保依赖于同一QTEMP库的所有请求都将在同一进程中运行;系统实用程序和db2实用程序都在单独的进程中运行。例如,在下面的QSHell命令行调用中,所有依赖于QTEMP的请求都将在运行db2实用程序的同一进程中运行;db2实用程序运行一个脚本,也可以改为运行一个动态复合语句,在此场景中,该复合语句是由shell实用程序中的\的脚本请求生成的:

代码语言:javascript
复制
 qsh cmd('                                                                 
   echo "call qsys2.qcmdexc                                                
           (''dspdbr mylib/myfile output(*outfile) outfile(qtemp/dspdbr)'')
        " >> mydb2.script                                                  
 ; echo "select WHREFI from QTEMP.DSPDBR where WHRELI =''MYLIB''           
        " >> mydb2.script                                                  
 ; db2 -f    mydb2.script                                                  
 ; rm        mydb2.script                                                  
         ')                                                                
票数 1
EN

Stack Overflow用户

发布于 2016-08-03 04:55:07

有一个与QShell db2命令等效的开源命令:https://bitbucket.org/litmis/db2util

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38276689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档