pl/sql函数和过程

Posted

技术标签:

【中文标题】pl/sql函数和过程【英文标题】:Pl/sql function and procedure 【发布时间】:2019-01-31 17:01:55 【问题描述】:

我们需要 INSERT 或 UPDATE 表的数据 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 块中插入..首先尝试更新部分..不知道它是否写入

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

【问题讨论】:

您好,欢迎来到 SO。请花一些时间阅读tour,并发布minimal reproducible example。你的问题太笼统了。这里的人们希望看到对这个问题付出一定程度的努力。 SO 不是代码编写服务。谢谢。 嗨,我想帮助身体不适的人.. 我试过这样做.. 虽然我不是程序员 我可以分享我尝试过的写作 那么请编辑问题并插入代码,具体问题是什么。谢谢 已编辑,续后。经过两天的努力,我能够纠正此代码.. bt m 无法修复 updaye 查询.. 显示一些 ora 0001 错误 【参考方案1】:

表中的列组合存在唯一键约束。 更新会导致表中多于 1 条记录在此列组合中具有相同的值。 确保确保列组合的唯一性,不仅在插入行时,而且在更新现有行时...

【讨论】:

以上是关于pl/sql函数和过程的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL程序设计—— 存储函数&存储过程

pl/sql函数和过程

我啥时候应该在 PL/SQL 中使用过程或函数?

Oracle PL/SQL 中过程/函数和对象的区别

Oracle数据库技术之PL/SQL语法和存储过程

什么是PL/SQL