PLS-00103: Обнаружен символ «конец файла» при ожидании ошибки - PullRequest
0 голосов
/ 02 ноября 2018

Я не работающий в БД, я пытаюсь запустить предоставленный мне скрипт SQL, который выдает ошибку ниже. Может кто-нибудь, пожалуйста, дайте мне знать, как это исправить. Заранее спасибо

[6550] ORA-06550: line 27, column 10:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the 
following:

   begin function pragma procedure

Я запускаю это на Oracle v12.1, дайте мне знать, если вам нужна какая-либо другая информация.

Кроме того, я попытался выполнить то же самое в intance v12.2, но все равно получаю ту же ошибку.

Вот SQL, который я выполняю

DECLARE 
   type ah_cursor IS REF CURSOR;
   ah_cur ah_cursor;
   ah_unmatched_cur ah_cursor;
   PROCEDURE insertAHFromCursor(cur IN ah_cursor) 
        IS 
        type ah_row is record("ISSUE_ID" NUMBER(38,0),
        "SEQNUMBER" NUMBER(38,0),
        "ATTRGUID" VARCHAR2(255 BYTE),
        "AUDITTIME" NUMBER(19,0),
        "PROJECTVERSION_ID" NUMBER(38,0),
        "USERNAME" VARCHAR2(255 BYTE),
        "CONFLICT" CHAR(1 BYTE) DEFAULT 'N',
        "OLDVALUE" VARCHAR2(500 BYTE),
        "NEWVALUE" VARCHAR2(500 BYTE));
        type TObjectTable is table of ah_row;
        ObjectTable$ TObjectTable;
      BEGIN
        LOOP
        fetch cur BULK COLLECT INTO ObjectTable$ LIMIT 1000;
        EXIT WHEN ObjectTable$.COUNT < 1;
        forall x in ObjectTable$.First..ObjectTable$.Last
        insert into audithistory(issue_id, seqNumber, attrGuid, auditTime, projectVersion_id, userName, conflict, oldValue, newValue)
        values (ObjectTable$(x).issue_id, ObjectTable$(x).seqNumber, ObjectTable$(x).attrGuid, ObjectTable$(x).auditTime, ObjectTable$(x).projectVersion_id, ObjectTable$(x).userName,  ObjectTable$(x).conflict, ObjectTable$(x).oldValue, ObjectTable$(x).newValue);
        commit;
        END LOOP;
      END;

      BEGIN
        OPEN ah_cur FOR
          SELECT aho.issue_id issue_id, aho.seqNumber seqNumber, aho.attrGuid attrGuid, aho.auditTime auditTime, 
            aho.projectVersion_id projectVersion_id, aho.userName userName, aho.conflict conflict,
            (CASE WHEN aho.oldValue IS NULL THEN 'NULL'
                WHEN alOld.lookupValue IS NULL THEN CAST(aho.oldValue as varchar2(500))
                ELSE CAST(alOld.lookupValue as varchar2(500)) END) oldValue,
            (CASE WHEN aho.newValue IS NULL THEN 'NULL'
                WHEN alNew.lookupValue IS NULL THEN CAST(aho.newValue as varchar2(500))
                ELSE CAST(alNew.lookupValue as varchar2(500)) END) newValue
        FROM audithistory_old aho
            INNER JOIN attr a ON aho.attrGuid = a.guid
            LEFT JOIN attrlookup alNew ON alNew.attrGuid = aho.attrGuid AND aho.newValue = alNew.lookupIndex
            LEFT JOIN attrlookup alOld ON alOld.attrGuid = aho.attrGuid AND aho.oldValue = alOld.lookupIndex
        WHERE a.attrType = 'CUSTOM'   
    insertAHFromCursor(ah_cur);
    close ah_cur;
    open ah_unmatched_cur for
        SELECT aho.issue_id issue_id, aho.seqNumber seqNumber, aho.attrGuid attrGuid, aho.auditTime auditTime, 
            aho.projectVersion_id projectVersion_id, aho.userName userName, aho.conflict conflict,
            (CASE WHEN aho.oldValue IS NULL THEN NULL ELSE CAST(aho.oldValue AS varchar2(500)) END) oldValue,
            (CASE WHEN aho.newValue IS NULL THEN NULL ELSE CAST(aho.newValue AS varchar2(500)) END) newValue
        FROM audithistory_old aho 
        WHERE NOT EXISTS (SELECT 1 
            FROM audithistory ah 
            WHERE aho.issue_id = ah.issue_id AND aho.seqNumber = ah.seqNumber);
     insertAHFromCursor(ah_unmatched_cur);
    close ah_unmatched_cur;
END;
/

1 Ответ

0 голосов
/ 02 ноября 2018

Я надеюсь, что у вас есть процедура insertAHFromCursor, которую нужно сначала скомпилировать в базе данных, а затем использовать эту процедуру внутри блока

Шаг: 1

 PROCEDURE insertAHFromCursor(cur IN ah_cursor) 
        IS 
        type ah_row is record("ISSUE_ID" NUMBER(38,0),
        "SEQNUMBER" NUMBER(38,0),
        "ATTRGUID" VARCHAR2(255 BYTE),
        "AUDITTIME" NUMBER(19,0),
        "PROJECTVERSION_ID" NUMBER(38,0),
        "USERNAME" VARCHAR2(255 BYTE),
        "CONFLICT" CHAR(1 BYTE) DEFAULT 'N',
        "OLDVALUE" VARCHAR2(500 BYTE),
        "NEWVALUE" VARCHAR2(500 BYTE));
        type TObjectTable is table of ah_row;
        ObjectTable$ TObjectTable;
      BEGIN
        LOOP
        fetch cur BULK COLLECT INTO ObjectTable$ LIMIT 1000;
        EXIT WHEN ObjectTable$.COUNT < 1;
        forall x in ObjectTable$.First..ObjectTable$.Last
        insert into audithistory(issue_id, seqNumber, attrGuid, auditTime, projectVersion_id, userName, conflict, oldValue, newValue)
        values (ObjectTable$(x).issue_id, ObjectTable$(x).seqNumber, ObjectTable$(x).attrGuid, ObjectTable$(x).auditTime, ObjectTable$(x).projectVersion_id, ObjectTable$(x).userName,  ObjectTable$(x).conflict, ObjectTable$(x).oldValue, ObjectTable$(x).newValue);
        commit;
        END LOOP;
      END;

Шаг 2:

DECLARE 
   type ah_cursor IS REF CURSOR;
   ah_cur ah_cursor;
   ah_unmatched_cur ah_cursor;

      BEGIN
        OPEN ah_cur FOR
          SELECT aho.issue_id issue_id, aho.seqNumber seqNumber, aho.attrGuid attrGuid, aho.auditTime auditTime, 
            aho.projectVersion_id projectVersion_id, aho.userName userName, aho.conflict conflict,
            (CASE WHEN aho.oldValue IS NULL THEN 'NULL'
                WHEN alOld.lookupValue IS NULL THEN CAST(aho.oldValue as varchar2(500))
                ELSE CAST(alOld.lookupValue as varchar2(500)) END) oldValue,
            (CASE WHEN aho.newValue IS NULL THEN 'NULL'
                WHEN alNew.lookupValue IS NULL THEN CAST(aho.newValue as varchar2(500))
                ELSE CAST(alNew.lookupValue as varchar2(500)) END) newValue
        FROM audithistory_old aho
            INNER JOIN attr a ON aho.attrGuid = a.guid
            LEFT JOIN attrlookup alNew ON alNew.attrGuid = aho.attrGuid AND aho.newValue = alNew.lookupIndex
            LEFT JOIN attrlookup alOld ON alOld.attrGuid = aho.attrGuid AND aho.oldValue = alOld.lookupIndex
        WHERE a.attrType = 'CUSTOM'   
    insertAHFromCursor(ah_cur);
    close ah_cur;
    open ah_unmatched_cur for
        SELECT aho.issue_id issue_id, aho.seqNumber seqNumber, aho.attrGuid attrGuid, aho.auditTime auditTime, 
            aho.projectVersion_id projectVersion_id, aho.userName userName, aho.conflict conflict,
            (CASE WHEN aho.oldValue IS NULL THEN NULL ELSE CAST(aho.oldValue AS varchar2(500)) END) oldValue,
            (CASE WHEN aho.newValue IS NULL THEN NULL ELSE CAST(aho.newValue AS varchar2(500)) END) newValue
        FROM audithistory_old aho 
        WHERE NOT EXISTS (SELECT 1 
            FROM audithistory ah 
            WHERE aho.issue_id = ah.issue_id AND aho.seqNumber = ah.seqNumber);
     insertAHFromCursor(ah_unmatched_cur);
    close ah_unmatched_cur;
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...