首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DB2动态搜索

DB2动态搜索
EN

Stack Overflow用户
提问于 2021-04-18 21:07:33
回答 1查看 42关注 0票数 0

我需要创建search (如'%-99‘或like’%NON%‘)-there for all tables in DB2 in SYS in all columns -请帮助--这是测试代码-但我有DB2数据库错误:错误42703DB2/LINUXX8664 SQL0206N " where“在使用的上下文中无效。

DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMP_DINAMIC_TEST_SEARCH ( TABSET VARCHAR(128),TABSCHEMA VARCHAR(128),TABNAME VARCHAR(128),COLUMN_NAME VARCHAR(128),ROW_COUNT BIGINT ) ON COMMIT PRESERVE NOT LOGGED;

代码语言:javascript
复制
BEGIN
FOR C AS CUR CURSOR WITH HOLD FOR
    SELECT 'INSERT INTO SESSION.TEMP_DINAMIC_TEST_SEARCH SELECT ''' 
    ||''' ,''' || TABLE_SCHEM || ''',''' || TABLE_NAME || ''',''' || COLUMN_NAME || ''', COUNT( DISTINCT(' || COLUMN_NAME || ')) FROM '
    || '"' ||  TABLE_SCHEM || '"."' || TABLE_NAME|| '"' ||WHERE|| '"' || COLUMN_NAME || '"' || LIKE || '"' ||'%-99'|| '"' || AS S
    FROM SYSIBM.SQLCOLUMNS
    WHERE TABLE_SCHEM = 'DWD' AND TABLE_NAME LIKE 'T_X_%'
    WITH UR
DO
      EXECUTE IMMEDIATE C.S;
      COMMIT;
END FOR;
END
EN

回答 1

Stack Overflow用户

发布于 2021-04-18 23:09:56

使用了错误的表达式。

试试这个:

代码语言:javascript
复制
SELECT 
   'INSERT INTO SESSION.TEMP_DINAMIC_TEST_SEARCH SELECT ''' 
|| ''' ,''' || TABLE_SCHEM || ''',''' || TABLE_NAME || ''',''' || COLUMN_NAME || ''', COUNT( DISTINCT(' || COLUMN_NAME || ')) FROM '
|| '"' ||  TABLE_SCHEM || '"."' || TABLE_NAME|| '" WHERE "' || COLUMN_NAME || '" LIKE ''%-99''' AS S
FROM SYSIBM.SQLCOLUMNS
WHERE TABLE_SCHEM = 'DWD' AND TABLE_NAME LIKE 'T_X_%'
/*
AND 
(
   TYPE_NAME LIKE '%CHAR' 
OR TYPE_NAME LIKE '%GRAPHIC'
OR TYPE_NAME LIKE '%CLOB'
)
*/
WITH UR

顺便说一句,只为字符串列生成INSERT SELECT语句是值得的,如注释掉的行所示。

尽量不要在Db2 for LUW中使用SYSIBM模式中的表-它们没有文档记录,并且它们的内容可能会在没有任何通知的情况下随着新的版本/修复包而发生变化。取而代之的是SYSCAT视图-在本例中是SYSCAT.COLUMNS视图。

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

https://stackoverflow.com/questions/67148917

复制
相关文章

相似问题

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