PLS-00642: локальные типы коллекций не допускаются в инструкциях SQL.я использую оракул datadase 12c - PullRequest
0 голосов
/ 14 мая 2019
CREATE OR REPLACE PROCEDURE RDBSTAGE.ATCHMNT_ERR_FILEID AUTHID CURRENT_USER
IS
  CURSOR cv_atchtab IS
    SELECT * FROM ATTACHMENT_ERROR;

  type ATCHMNT_ERR_nt is table of cv_atchtab%ROWTYPE;
  I_ATCHMNT_ERR ATCHMNT_ERR_nt;

  type file_id_nt is table of VARCHAR2(40);
  V_FILE_ID file_id_nt;
BEGIN
  OPEN cv_atchtab;
  LOOP
    FETCH cv_atchtab BULK COLLECT INTO I_ATCHMNT_ERR;
    EXIT WHEN I_ATCHMNT_ERR.COUNT = 0; -- changed this

    FOR i IN 1..I_ATCHMNT_ERR.COUNT
    LOOP
      SELECT FILE_ID BULK COLLECT
      INTO V_FILE_ID
      FROM ATTACHMENT_CLAIM t1
      WHERE t1.CLAIM_TCN_ID = I_ATCHMNT_ERR(i).CLAIM_TCN_ID;

      UPDATE ATTACHMENT_ERROR t2
      SET FILE_ID = V_FILE_ID
      WHERE t2.CLAIM_TCN_ID = I_ATCHMNT_ERR(i).CLAIM_TCN_ID;  -- changed this
    END LOOP;

  END LOOP;    
  CLOSE cv_atchtab; 

END ATCHMNT_ERR_FILEID; 
/
Show ERRORS

1 Ответ

3 голосов
/ 14 мая 2019

Может быть, я что-то упускаю, но - читая ваш комментарий, это выглядит как простое UPDATE утверждение.Зачем ты сделал это таким сложным способом?

update attachment_error a set
  a.file_id = (select c.file_id
               from attachment_claim c
               where c.claim_tcn_id = a.claim_tcn_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...