--1.创建一个存储过程,以员工号为参数,输出该员工的工资
CREATE OR REPLACE PROCEDURE P1(V_EMPNO IN NUMBER, V_EMP OUT EMP%ROWTYPE)
IS
BEGIN
SELECT * INTO V_EMP FROM EMP WHERE EMPNO = V_EMPNO;
END;
DECLARE
V_E EMP%ROWTYPE;
V_N NUMBER := &INPUT;
BEGIN
P1(V_N, V_E);
DBMS_OUTPUT.PUT_LINE(V_E.SAL);
END;
CREATE OR REPLACE PROCEDURE P7(v_empno IN emp.empno%TYPE)
IS
v_sal NUMBER;
BEGIN
SELECT sal INTO v_sal FROM emp WHERE empno=v_empno;
dbms_OUTPUT.PUT_LINE(v_empno||v_sal);
END;
CALL p7(7369);
--2.创建一个存储过程,以员工号为参数,修改该员工的工资。若该员工属于10号部门,
则工资增加150;若属于20号部门,则工资增加200;若属于30号部门,则工资增加250;
若属于其他部门,则增加300。
/*
CREATE OR REPLACE PROCEDURE p2(v_empno empp.empno%TYPE)
IS
v_sal empp.sal%TYPE;
v_deptno empp.deptno%TYPE;
BEGIN
SELECT sal,deptno INTO v_sal,v_deptno FROM empp WHERE empno=v_empno;
IF v_deptno=10 THEN
v_sal:=v_sal+150;
ELSIF v_deptno=20 THEN
v_sal:=v_sal+200;
ELSIF v_deptno=30 THEN
v_sal:=v_sal+250;
ELSE
v_sal:=v_sal+300;
END IF;
UPDATE empp SET sal=v_sal WHERE empno=v_empno;
END;
SELECT * FROM empp;
SELECT * FROM emp;
DECLARE
v_empno empp.empno%TYPE:=&input;
BEGIN
p2(v_empno);
dbms_OUTPUT.PUT_LINE('----------');
END;
*/
CREATE OR REPLACE PROCEDURE p3(v_empno IN empp.empno%TYPE)
IS
v_deptno empp.deptno%TYPE;
BEGIN
SELECT deptno INTO v_deptno FROM empp WHERE empno=v_empno;
IF v_deptno=10 THEN
UPDATE empp SET sal =sal+150 WHERE deptno=v_deptno;
END IF;
END;
DECLARE
v_n empp.empno%TYPE:=&input;
BEGIN
p3(v_n);
END;
--3.创建一个存储过程,以员工号为参数,返回该员工的工作年限(以参数形式返回)。
CREATE OR REPLACE PROCEDURE P4(V_EMPNO IN EMPP.EMPNO%TYPE, V_YEAR OUT NUMBER)
IS
BEGIN
SELECT ROUND((SYSDATE - HIREDATE) / 365, 1) INTO V_YEAR FROM EMPP WHERE EMPNO = V_EMPNO;
END;
DECLARE
V_EMPNO EMPP.EMPNO%TYPE :=&INPUT;
V_YEAR NUMBER;
BEGIN
P4(V_EMPNO, V_YEAR);
DBMS_OUTPUT.PUT_LINE(V_EMPNO || ' 工作年限为 ' || V_YEAR || '年');
END;
--4.创建一个存储过程,以部门号为参数,输出入职日期最早的10个员工信息。
/*SELECT e.*,dense_rank()OVER(ORDER BY hiredate) r FROM empp e ) a WHERE a.r<11;
CREATE OR REPLACE PROCEDURE p5
IS
BEGIN
FOR i IN (SELECT * FROM (SELECT e.*,dense_rank()OVER(ORDER BY hiredate) r FROM empp e ) a WHERE a.r<11)
LOOP
dbms_OUTPUT.PUT_LINE(i.empno||';'||i.ename||';'||
i.job||';'||i.mgr||';'||i.hiredate||';'||i.sal||';'||
i.comm||';'||i.deptno);
END LOOP;
END;
BEGIN
p5();
END;*/ --wucan
CREATE OR REPLACE PROCEDURE PP(V_DEPTNO EMPP.DEPTNO%TYPE)
IS
CURSOR CUR IS SELECT * FROM EMPP WHERE DEPTNO=V_DEPTNO ORDER BY HIREDATE;
V_DATA NUMBER:=0;
BEGIN
FOR I IN CUR LOOP
V_DATA:=V_DATA+1;
DBMS_OUTPUT.PUT_LINE(I.EMPNO||';'||I.ENAME||';'||TO_CHAR(I.HIREDATE,'yyyy-MM-dd'));
IF V_DATA=10 THEN
EXIT;
EN