创建一个向数据库新增客户的过程,输入客户的编号,姓名和负责销售员的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;