首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ORA-44002函数体上的无效对象名称

ORA-44002函数体上的无效对象名称
EN

Stack Overflow用户
提问于 2020-11-26 17:33:21
回答 2查看 79关注 0票数 0
代码语言:javascript
代码运行次数:0
运行
复制
DECLARE 
      X VARCHAR2(32767);
    BEGIN
      X := '
      SELECT to_char(days.n, ''DD/MM/YYYY HH24'') as name,
             NVL(ROUND(AVG(s1.HIGH),2),-1) HIGH
      FROM  (SELECT TO_DATE('''||:P8_DATE_DEBUT||''', ''DD/MM/YYYYHH24'')+(level-1)/TO_NUMBER('''||:P8_ECHELLE||''') as n
             FROM   dual
             CONNECT BY level <= TO_DATE('''||:P8_DATE_FIN||''', ''DD/MM/YYYYHH24'')+1-TO_DATE('''||:P8_DATE_DEBUT||''', ''DD/MM/YYYYHH24''))*TO_NUMBER('''||:P8_ECHELLE||''')      
            ) days
            LEFT OUTER JOIN
            (SELECT trunc(RAW_DATE, '''||:P8_TRUNC||''') as HO,
                    NVL(ROUND(AVG(VALID_VALUE),2), 0) as HIGH
             FROM  '||
                   dbms_assert.sql_object_name('SAFEGE.MSR_'||NVL(:P8_ECHELLE_EMMA,'4245')) -- NVL better than COALESCE for a simple Null check
                   ||'@EMMASAFE.NTSIVOA'
                   ||'
             WHERE RAW_DATE >= TO_DATE('''||:P8_DATE_DEBUT||''', ''DD/MM/YYYY'')  -- avoiding BETWEEN means less messing about with time components
             AND   RAW_DATE <  TO_DATE('''||:P8_DATE_FIN||''', ''DD/MM/YYYY'')+1  -- just need to use less than target date+1 instead
             AND   VALIDITY = 1
             GROUP BY trunc(RAW_DATE, '''||:P8_TRUNC||''') 
            ) s1
            ON days.n = S1.HO
      GROUP BY days.n
      ORDER BY days.n';
      RETURN X;
    END;

我在这个函数体上得到了一个无效的对象名错误。我找不到出现此错误的行。有关于如何解决这个语法错误的想法吗?

向您致敬,克里斯蒂安

EN

回答 2

Stack Overflow用户

发布于 2020-11-26 18:14:22

就是这一行:

代码语言:javascript
代码运行次数:0
运行
复制
dbms_assert.sql_object_name('SAFEGE.MSR_'||NVL(:P8_ECHELLE_EMMA,'4245'))

DBMS_ASSERT.SQL_OBJECT_NAME function documentation声明:

SQL此函数用于验证输入参数字符串是否为现有

对象的限定SQL标识符。

您断言该对象存在,但在断言外部将其与跨越数据库链接的@EMMASAFE.NTSIVOA连接起来。正在运行查询的服务器不能断言对象名有效,因为该服务器上可能不存在该对象名(而是远程服务器上存在)。

db<>fiddle

票数 1
EN

Stack Overflow用户

发布于 2020-11-27 21:28:34

我已经删除了这个函数。但是现在我得到的ORA-00907在第8行缺少右括号:

FROM (SELECT DATE(‘|:p8_TO_DATE_TO_DATE||’,''DD/MM/YYYYHH24'')+(level-1)/TO_NUMBER('''||:P8_ECHELLE||''') as n FROM dual

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

https://stackoverflow.com/questions/65019331

复制
相关文章

相似问题

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