Pl / sql функция и процедура - PullRequest
0 голосов
/ 31 января 2019

Нам нужно ВСТАВИТЬ или ОБНОВИТЬ данные таблицы consultant_skill, создать необходимые функции, процедуры ..., которые принимают идентификатор консультанта, идентификатор навыка и статус сертификации для задачи.Процедура должна быть достаточно удобной для пользователя, чтобы обрабатывать все возможные ошибки, такие как идентификатор консультанта, идентификатор навыка не существует ИЛИ статус сертификации отличается от «Y», «N».Не забудьте отобразить: фамилию консультанта, имя, описание навыка и подтверждение выполненного DML (подсказка: не забудьте добавить COMMIT внутри процедуры)

CREATE OR replace PROCEDURE nw (p_c_id          NUMBER, 
                                p_s_id          NUMBER, 
                                p_certification VARCHAR2) 
AS 
  v_c_id          NUMBER := p_c_id; 
  v_s_id          NUMBER := p_s_id; 
  v_certification VARCHAR2(20); 
  flag            NUMBER(3); 
BEGIN 
  SELECT count(*) 
  INTO   flag 
  FROM   consultant_skill 
  WHERE  c_id = v_c_id 
  AND    skill_id = v_s_id; 

  dbms_output.Put_line (flag); 
  IF flag > 0 THEN 
    UPDATE consultant_skill 
    SET    skill_id = p_s_id, 
           certification = p_certification 
    WHERE  c_id = v_c_id; 

  ELSE 
    dbms_output.Put_line ('bye bye'); 
  END IF; 
END; 
/ 

Застрял на самом обновлении .. еще допопробуйте вставить в блок else .. сначала пытаясь обновить часть .. не знаю, если это запись или нет

Но при компиляции samd он показывает ora 00001: уникальное ограничение нарушено

1 Ответ

0 голосов
/ 31 января 2019

Существует уникальное ключевое ограничение для комбинации столбцов в таблице.В результате обновления более 1 записи в таблице имеют одинаковые значения для этой комбинации столбцов.Убедитесь, что уникальность сочетания столбцов не только при вставке строк, но и при обновлении существующих строк ...

...