--游标 --函数

--游标   --函数
--1.取出emp表中的所有人的名字
DECLARE
   CURSOR C IS SELECT * FROM EMP;
   V_EMP C%ROWTYPE;  --V_EMP;带游标的emp中的数据
BEGIN
  OPEN C; --打开游标
      FETCH C INTO V_EMP; --把当前游标指向的数据拿出来
      DBMS_OUTPUT.PUT_LINE(V_EMP.ENAME);
      CLOSE C;
  
END;


--循环输出
DECLARE
   CURSOR C IS --声明游标
     SELECT * FROM EMP;
     V_EMP C%ROWTYPE;
BEGIN
    OPEN C; --打开游标
       LOOP
         FETCH C INTO V_EMP;  --把当前的游标指定的数据拿出来
         EXIT WHEN (C%NOTFOUND);
         DBMS_OUTPUT.PUT_LINE(V_EMP.ENAME);
        END LOOP;
     CLOSE C;
END;


--2.带参数的游标
DECLARE
   CURSOR C(V_DEPTNO EMP.DEPTNO%TYPE,V_JOB EMP.JOB%TYPE)
   IS
   SELECT ENAME,SAL FROM EMP WHERE DEPTNO =V_DEPTNO AND JOB =V_JOB;
BEGIN
    FOR V_TEMP IN C(30,'CLERK')
      LOOP
         DBMS_OUTPUT.PUT_LINE(V_TEMP.ENAME);
        END LOOP;


END;


SELECT * FROM EMP WHERE DEPTNO =30 AND JOB ='CLERK';


--3.可更新的游标
--创建一张表
CREATE TABLE EMP2
AS
SELECT * FROM EMP; --11


SELECT * FROM EMP2;


--需求是小于于2000的*2,大于等于3000的删掉


DECLARE
     CURSOR C
     IS
       SELECT * FROM EMP2 FOR UPDATE;  --只要写for update:为了更新才使用的游标
   BEGIN
         FOR V_TEMP IN C
           LOOP
             IF(V_TEMP.SAL<2000)THEN
                 UPDATE EMP2 SET SAL = SAL*2 WHERE CURRENT OF C; --当前游标
              ELSIF(V_TEMP.SAL >3000)THEN
              DELETE FROM EMP2 WHERE CURRENT OF C;
                END IF;
             END LOOP;
END;


--函数
CREATE OR REPLACE FUNCTION SAL_TAX  --方法  计算薪资的个人所得税
       (V_SAL NUMBER)  --形参number类型
       RETURN NUMBER
    IS
BEGIN
   IF(V_SAL<2000)THEN
       RETURN 0.10;
    ELSIF(V_SAL <2750)THEN
       RETURN 0.15;
    ELSE
      RETURN 0.20;
    END IF;
END;



猜你喜欢

转载自blog.csdn.net/xiaoxiaode_shu/article/details/80495152