REPLACE PROCEDURE sp_add_emp1(
v_empno emp.empno%TYPE,
v_ename emp.ename%TYPE,
v_deptno dept.deptno%TYPE,
v_dname dept.dname%TYPE
)AS
num1 NUMBER;
num2 NUMBER;
BEGIN
SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;
IF(num1=0) THEN
INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);
END IF;
SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;
IF(num2=0)THEN
INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);
ELSE
raise_application_error(-202021,'员工id 重复!!!');
END IF;
commit;
END;
CREATE OR REPLACE PROCEDURE sp_add_emp2(
v_empno emp.empno%TYPE,
v_ename emp.ename%TYPE,
v_deptno dept.deptno%TYPE,
v_dname dept.dname%TYPE,
num out number
)AS
num1 NUMBER;
num2 NUMBER;
BEGIN
SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;
IF(num1=0) THEN
INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);
END IF;
SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;
IF(num2=0)THEN
INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);
ELSE
raise_application_error(-202021,'员工id 重复!!!');
END IF;
num:=num1;
commit;
END;
--1.建包
CREATE OR REPLACE PACKAGE my_pak AS
TYPE my_cus IS REF CURSOR ;
END my_pak;
--2.写存储返回过程
CREATE OR REPLACE PROCEDURE sp_add_emp3(
v_empno emp.empno%TYPE,
v_ename emp.ename%TYPE,
v_deptno dept.deptno%TYPE,
v_dname dept.dname%TYPE,
p_cus OUT my_pak.my_cus
)AS
num1 NUMBER;
num2 NUMBER;
BEGIN
OPEN p_cus FOR select empno,ename into v_empno,v_ename from emp where deptno =v_deptno
SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;
IF(num1=0) THEN
INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);
END IF;
SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;
IF(num2=0)THEN
INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);
ELSE
raise_application_error(-202021,'员工id 重复!!!');
END IF;
commit;
END;