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;