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;
我在这个函数体上得到了一个无效的对象名错误。我找不到出现此错误的行。有关于如何解决这个语法错误的想法吗?
向您致敬,克里斯蒂安
发布于 2020-11-26 10:14:22
就是这一行:
dbms_assert.sql_object_name('SAFEGE.MSR_'||NVL(:P8_ECHELLE_EMMA,'4245'))
DBMS_ASSERT.SQL_OBJECT_NAME
function documentation声明:
SQL此函数用于验证输入参数字符串是否为现有
对象的限定SQL标识符。
您断言该对象存在,但在断言外部将其与跨越数据库链接的@EMMASAFE.NTSIVOA
连接起来。正在运行查询的服务器不能断言对象名有效,因为该服务器上可能不存在该对象名(而是远程服务器上存在)。
发布于 2020-11-27 13: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
https://stackoverflow.com/questions/65019331
复制相似问题