5

我还是个菜鸟,如果这个问题有点明显,请原谅。我确实搜索了答案,但要么无法理解我找到的答案是如何应用的,要么根本找不到答案。

我在 DB2 for i 服务器上有一个庞大的数据库,我通过 SQLExplorer(基于 Squirrel SQL)使用 SQL 访问它。这些表格的文档记录很差,首要任务是弄清楚如何找到我的出路。

我想写一个简单的查询来做到这一点:

1)允许我搜索整个数据库以查找包含名为“备注”的列(其中包含字段描述)的表。

2)然后我希望它在该列中搜索关键字。

3)我想要一个返回的表,其中包含包含该关键字的表的名称(只是名称,我可以稍后按字母顺序查找表,如果需要,可以查看内部。)

我需要这个搜索是超轻量级的,我希望我描述的概念能够实现这一点。任何消耗大量资源的东西都可能会激怒服务器的系统管理员。

只是为了表明我已经尝试过(而且我是一个完整的菜鸟),这就是我到目前为止所得到的。

SELECT *
FROM <dbname>
WHERE Remarks LIKE '<keyword>'

随意嘲笑,我告诉过你我是个白痴:-)。

有什么帮助吗?也许至少是朝着正确的方向推进?

PS - 我似乎无法在 SQLExplorer 中找到搜索功能,如果有人知道我是否可以使用简单的搜索或过滤器来实现同样的目标......那就太好了。

4

3 回答 3

7

您可以查询系统目录以识别表:

SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME 
FROM QSYS2.SYSCOLUMNS WHERE UPPER(DBILFL) = 'REMARKS'

然后分别查询每个表:

SELECT * FROM TABLE_SCHEMA.TABLE_NAME WHERE Remarks LIKE '%<keyword>%'

有关模式表达式的详细信息,请参阅LIKE 谓词

于 2012-12-06T19:11:34.323 回答
3

通常我使用这样的东西

SELECT TABLE_SCHEMA, TABLE_NAME
       ,COLUMN_NAME,SYSTEM_COLUMN_NAME,COLUMN_HEADING          
       ,DATA_TYPE, "LENGTH",NUMERIC_SCALE
FROM QSYS2.SYSCOLUMNS
WHERE UPPER(COLUMN_NAME) LIKE '%REMARK%' 

@JamesA,我在 V6R1,默认情况下,普通用户无权在 QSYS 中反对 QADBIFLD

于 2012-12-07T02:00:39.017 回答
1

通常,许多(如果不是大多数)IBM i 商店(尤其是那些使用 RPG 的商店)坚持使用 10 个(或更少)字符的模式名称和表名,并且为“系统”列名使用 10 个(或更少)字符的名称,即使更长还提供了列名。列文本通常描述每个字段。

SELECT SYSTEM_TABLE_SCHEMA, SYSTEM_TABLE_NAME
      ,SYSTEM_COLUMN_NAME,         
      ,DATA_TYPE, "LENGTH",NUMERIC_SCALE
      ,CHAR(COLUMN_TEXT) 
FROM QSYS2.SYSCOLUMNS
WHERE UPPER(COLUMN_NAME) LIKE '%REMARK%' 
于 2012-12-07T05:47:03.397 回答