PLS-00642 локальные типы коллекции не допускаются в SQL-выражении - PullRequest
0 голосов
/ 26 марта 2019

Я понимаю, что существует много материала об этом, но я все еще не могу заставить эту работу должным образом. Код выше - моя последняя попытка. Проблема в том, что у меня есть дубликаты, а иногда трижды записей в таблице

Что мне нужно:

  • получить повторные записи
  • "сохранить" второстепенную последовательность каждой повторяющейся записи (должна быть создана первая запись)
  • удалить другие записи

* Я не мог сделать группу, ... имея счет> 1, используя последовательные, потому что последовательности не повторяются

DECLARE

TYPE SEQ_HISTORICO IS TABLE OF SIA.HISTORICO_ESCOLAR.NUM_SEQ_HISTORICO%TYPE;

V_MANTER SEQ_HISTORICO; -- least sequential, should be mantained

V_EXCLUIR SEQ_HISTORICO; -- others, to be deleted


BEGIN

   WITH 
   DUPLICADAS AS
   (
              select he.seq_historico,
                   he.cod_disciplina,
                   di.nom_disciplina,
                   pa.nom_fantasia,
                   he.cod_situacao_aluno_turma
              from ow.historico_escolar he
             inner join ow.periodo_academico pa on he.num_seq_periodo_academico =
                                                    pa.num_seq_periodo_academico
             inner join ow.disciplina di on he.cod_disciplina = di.cod_disciplina
             where he.seq_aluno_curso = '424242'
               and he.cod_situacao_aluno_turma = 'IS'

   )
   SELECT LEAST(nseq_historico) INTO V_MANTER FROM DUPLICADAS;

END;

ОШИБКА: типы локальных коллекций pls-00642 не разрешены в инструкции sql

Должен ли я использовать pls_integer?

1 Ответ

1 голос
/ 26 марта 2019

Ошибка пытается сказать вам, что вы не можете SELECT...INTO... экземпляр типа, объявленного в PL / SQL.В этом случае проблема возникает из-за

SELECT LEAST(nseq_historico) INTO V_MANTER FROM DUPLICADAS

Здесь V_MANTER имеет тип SEQ_HISTORICO, который определен в блоке PL / SQL.

Однако вы можете BULK COLLECT в коллекцию PL / SQL, но для использования функции MIN необходимо добавить предложение GROUP BY.Из ваших комментариев следует, что вы хотите сгруппировать по HISTORICO_ESCOLAR.COD_DISCIPLINA, поэтому, сложив это вместе, мы получим:

WITH DUPLICADAS AS (select he.seq_historico,
                           he.cod_disciplina,
                           di.nom_disciplina,
                           pa.nom_fantasia,
                           he.cod_situacao_aluno_turma
                      from ow.historico_escolar he
                      inner join ow.periodo_academico pa
                        on he.num_seq_periodo_academico = pa.num_seq_periodo_academico
                      inner join ow.disciplina di
                        on he.cod_disciplina = di.cod_disciplina
                      where he.seq_aluno_curso = '424242' and 
                            he.cod_situacao_aluno_turma = 'IS')
SELECT COD_DISCIPLINA, MIN(SEQ_HISTORICO) 
  BULK COLLECT INTO V_MANTER
  FROM DUPLICADAS
  GROUP BY COD_DISCIPLINA

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...