Oracle数据库 ~ PL/SQL编程 ~ 子程序 ~新增数据的PROCEDURE

创建一个向数据库新增客户的过程,输入客户的编号,姓名和负责销售员的ID,以及信用额度,要求在插入数据之前,检查提供的数据是否正正确。

CREATE OR REPLACE PROCEDURE ADD_CUST(
  v_cno CUSTOMERS.CUST_ID%TYPE,--客户的编号
  v_cname CUSTOMERS.COMPANY%TYPE,--客户的名称
  v_cred_lim CUSTOMERS.CREDIT_LIMIT%TYPE,--客户的信息额度
  v_emplID SALESREPS.EMPL_ID%TYPE,--客户负责的销售员的ID
  p_result OUT NUMBER--操作返回的值
  )
AS
  v_custCount NUMBER;--客户的编号是否重复的变量
  v_empCount NUMBER;
BEGIN
  --查询新输入的客户编号是否有重复
  SELECT COUNT(*) into v_custCount from CUSTOMERS
  where CUST_ID=v_cno;
  IF v_custCount > 0 THEN
    p_result:=-1;
    RETURN; 
  END IF;  
  ----查询输入的销售员的编号是否重复
  SELECT COUNT(*) INTO v_empCount from SALESREPS
  WHERE EMPL_ID=v_emplID;
  IF v_empCount=0 THEN
    p_result:=-2;
    RETURN; 
  END IF;
  --插入新的数据
  INSERT INTO CUSTOMERS(CUST_ID,EMPL_ID,COMPANY,CREDIT_LIMIT)
  VALUES(v_cno,v_emplID,v_cname,v_cred_lim);
  p_result:=0;
  COMMIT;
  --抛出异常错误的处理
  EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.put_line(触发了SQL错误||SQLERRM);
    ROLLBACK;
END;

编写程序,调用子程序

DECLARE
  p_result NUMBER;
BEGIN
  ADD_CUST(66,SADASD,1231456,666,p_result);
  IF p_result=-1 THEN
    DBMS_OUTPUT.put_line(新增数据失败,客户的编号重复);
  ELSIF p_result=-2 THEN
    DBMS_OUTPUT.put_line(新增数据失败,销售员的编号没有查到);  
  ELSE
    DBMS_OUTPUT.put_line(新增数据成功);  
  END IF;
END;
经验分享 程序员 微信小程序 职场和发展