pl / sql函数和过程

时间:2019-01-31 17:01:56

标签: sql oracle plsql plsql-package

我们需要插入或更新表advisor_skill的数据,创建 所需的功能,过程……接受顾问ID,技能ID和 任务的认证状态。该程序应易于使用 足以处理所有可能的错误,例如顾问ID,技能ID 存在或证明状态与“ 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块中..首先尝试更新部分.. dnt知道它是否在写入

但是在编译samd时,它显示ora 00001:违反了唯一约束

1 个答案:

答案 0 :(得分:0)

在表中的列组合上有唯一的键约束。 该更新会导致超过1条记录在表中具有相同值的列的这个组合。 确保不仅在插入行时,而且在更新现有行时,都确保列组合的唯一性。