0

我正在尝试使用 DB_LINKS 更新远程数据库表,但出现错误

SQL Error: ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:

案例场景 -

  1. 从本地数据库- 以 sysdba 身份连接

    sqlplus / as sysdba
    
  2. 使用从本地数据库获取的值更新远程数据库

    INSERT INTO username.D_BackupStatus@db_link_name
    (SELECT    ''''
        || (SELECT DECODE (db_unique_name, NULL, name, db_unique_name)
              FROM v$database)
        || ''','''
        || TO_CHAR (START_TIME, 'dd-mon-rr hh24:mi:ss')
        || ''','''
        || TO_CHAR (END_TIME, 'dd-mon-rr hh24:mi:ss')
        || ''','''
        || time_taken_display
        || ''','''
        || TRIM (STATUS)
        || ''','''
        || INPUT_TYPE
        || ''','''
        || DECODE (TO_CHAR (start_time, 'd'),
                   1, 'Sunday',
                   2, 'Monday',
                   3, 'Tuesday',
                   4, 'Wednesday',
                   5, 'Thursday',
                   6, 'Friday',
                   7, 'Saturday')
        || ''','''
        || (SELECT host_name FROM v$instance)
        || ''''
    FROM V$RMAN_BACKUP_JOB_DETAILS
    WHERE     TO_DATE (TO_CHAR (START_TIME, 'dd-mon-rr'), 'dd-mon-rr') >=
            TO_DATE (TO_CHAR (SYSDATE - 6, 'dd-mon-rr'), 'dd-mon-rr')
        AND input_type IN
               ('DB FULL', 'DB INCR')                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
               order      by   START_TIME);
    

输出

Error starting at line : 1 in command -
insert into username.D_BackupStatus@db_link_name 
(select '''' ||
(select decode(db_unique_name,NULL,name,db_unique_name) from v$database)||''','''||
to_char(START_TIME,'dd-mon-rr hh24:mi:ss') || ''','''||to_char(END_TIME,'dd-mon-rr hh24:mi:ss') 
|| ''',''' || time_taken_display|| ''',''' ||trim(STATUS) || ''',''' || INPUT_TYPE||''','''
||decode(to_char(start_time, 'd'), 1, 'Sunday', 2, 'Monday',3, 'Tuesday', 4, 'Wednesday',5, 'Thursday', 6,
'Friday',7, 'Saturday')||''','''||(select host_name from v$instance) ||''''
from V$RMAN_BACKUP_JOB_DETAILS
where to_date(to_char(START_TIME,'dd-mon-rr'),'dd-mon-rr')>=to_date(to_char(sysdate-6,'dd-mon-rr'),'dd-mon-rr')
and input_type in ('DB FULL','DB INCR')
order by START_TIME)

Error at Command Line : 11 Column : 1
Error report -
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:

谁能帮我查询一下,有什么问题吗??

4

1 回答 1

0

从子查询中删除ORDER BY子句;在这种情况下它是无效的。

       AND input_type IN ('DB FULL', 'DB INCR')
       -- ORDER BY start_time
                                               );

不知道接下来会发生什么,除了您可以使用 q-quoting 机制并避免使用那么多单引号这一事实。

于 2021-12-21T10:12:22.510 回答