【问题标题】:Missing Keyword: Trying to use variables in plsql缺少关键字:尝试在 plsql 中使用变量
【发布时间】:2018-03-29 20:06:41
【问题描述】:

我正在尝试在我的 sql 代码中存储字符串并使用变量进行连接,但我不断收到错误消息。这是我尝试过的:

DECLARE 
    ENV VARCHAR(9999);
    MV  VARCHAR(999);
    MVNAME VARCHAR(999) := 'TEST2';
BEGIN
    -- GET ENVIRONMENT
    SELECT sys_context('USERENV','DB_NAME')
    INTO ENV
    FROM DUAL;

    MV := 'CREATE MATERIALIZED VIEW' || MVNAME ||
            'COMPRESS
            NOLOGGING
            PARTITION BY HASH (DATAID)
            PARTITIONS 16
            PARALLEL
            BUILD IMMEDIATE
            USING INDEX 
            REFRESH 
            NEXT trunc(SYSDATE, ''hh'') + 1/24        
            FAST 
            WITH ROWID 
            USING DEFAULT LOCAL ROLLBACK SEGMENT 
            ENABLE QUERY REWRITE AS ';

    IF ENV = 'CSTMP' THEN
        execute immediate MV || 'SELECT count(m.work_ownerid)
                        FROM MV_WWORK_SHRUNK m
                        WHERE WORK_STATUS = 2';   
    ELSIF ENV = 'PROD' THEN
        execute immediate MV || 'SELECT count(m.work_ownerid)
                        FROM MV_WWORK_SHRUNK m
                        WHERE WORK_STATUS = 2';             
    ELSE
        execute immediate MV || 'SELECT count(m.work_ownerid)
                        FROM MV_WWORK_SHRUNK m
                        WHERE WORK_STATUS = 2';
    END IF;
END;

【问题讨论】:

  • 一个明显的观察结果是结果字符串中缺少空格。
  • 我不确定我理解这意味着什么。
  • 在 COMPRESS 之前添加一个空格。也是在 VIEW 之后。
  • 哦,我明白了,连接之间没有空格
  • I downvoted because lacking an MCVE makes it hard to answer 并且因为您没有提供错误消息并且因为您没有使用@Littlefoot 提出的 dbms_output 方法

标签: sql database oracle plsql


【解决方案1】:

如果你显示连接的结果而不是执行它,你会得到这样的结果:

CREATE MATERIALIZED VIEWTEST2" COMPRESS
            NOLOGGING
            PARTITION BY HASH (DATAID)
            PARTITIONS 16
            PARALLEL
            BUILD IMMEDIATE
            USING INDEX 
            REFRESH 
            NEXT trunc(SYSDATE, 'hh') + 1/24        
            FAST 
            WITH ROWID 
            USING DEFAULT LOCAL ROLLBACK SEGMENT 
            ENABLE QUERY REWRITE AS SELECT count(m.work_ownerid)
                        FROM MV_WWORK_SHRUNK m
                        WHERE WORK_STATUS = 2

更正错误并重试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多