【Oracle强化】②第二章 编写控制结构

1.写一个PL/SQL块:向dept表中循环插入5条记录,每一条记录的deptno 值比表中最大的deptno 值增加1,dname分别为"education1" "education2"..."education5", loc 值都为空.
2.1到30之间,能被3整除的数打印出来
3.输入4位整数,判断是否是闰年
4.定义员工号码,从emp表中获得工资,
     如果工资小于1000,'POOR',
         大于等于1000小于2000,'MEDIUM',
         大于等于2000小于3000  ,'GOOD',
         大于等于3000小于4000  ,'VERY GOOD',
         否则,'EXCELLENT'
5.对所有员工,如果该员工的职位是MANAGER,并且在DALLAS工作那么就给他工资加15%;如果该员工职位是CLERK,并且该员工在NEW YORK工作那么工资扣除10%,其他情况不作处理。
6.对直接上级是‘BLAKE’的所有员工,按照参加工作的时间加薪:
   82年之前的加薪20%,82年之后的加薪10%

1.DECLARE
BEGIN
  FOR i IN 1..5 LOOP
    INSERT INTO dept VALUES((SELECT MAX(deptno) FROM dept)+1,'education'||i,NULL);
  END LOOP;
END;
2.
DECLARE
BEGIN
	FOR i IN 1..30 LOOP
		IF i/3=ROUND(i/3) THEN
			dbms_output.put_line(i);
		END IF;
	END LOOP;
END;
3.
DECLARE
  years NUMBER(6);
BEGIN
  years:=&year;
  IF (years/100)=ROUND(years/100) THEN
    IF (years/4)=ROUND(years/4) THEN
      dbms_output.put_line(years||'年是闰年');
			ELSE
				dbms_output.put_line(years||'年不是闰年');
    END IF;
  ELSE IF (years/4)=ROUND(years/4) THEN
    dbms_output.put_line(years||'年是闰年');
		ELSE
				dbms_output.put_line(years||'年不是闰年');
    END IF;
    END IF;
END;
4.
DECLARE
  empnos NUMBER(4);
	emp_sal emp.sal%TYPE;
BEGIN
  empnos:=&empnos;
	SELECT sal INTO emp_sal FROM emp WHERE empno=empnos;
	IF emp_sal<1000 THEN
		dbms_output.put_line('POOR');
	ELSE IF emp_sal BETWEEN 1000 AND 2000 THEN
		dbms_output.put_line('MEDIUM');
	ELSE IF emp_sal BETWEEN 2000 AND 3000 THEN
	  dbms_output.put_line('GOOD');
	ELSE IF emp_sal BETWEEN 3000 AND 4000 THEN
		dbms_output.put_line('VERY GOOD');
	ELSE 
		dbms_output.put_line('EXCELLENT');
		END IF;
		END IF;
		END IF;
		END IF;
END;
5.
DECLARE
  CURSOR emp_dept_cursor IS
	       SELECT e.empno,e.job,d.loc FROM emp e,dept d WHERE e.deptno=d.deptno;
	emp_empno emp.empno%TYPE;
	emp_job emp.job%TYPE;
	dept_loc dept.loc%TYPE;
BEGIN
	OPEN emp_dept_cursor;
	LOOP
		FETCH emp_dept_cursor INTO emp_empno,emp_job,dept_loc;
		EXIT WHEN emp_dept_cursor%NOTFOUND;
		IF emp_job='MANAGER' AND dept_loc='DALLAS' THEN
			UPDATE emp SET sal=sal*1.15 WHERE empno=emp_empno;
		END IF;
		IF emp_job='CLERK' AND dept_loc='NEW YORK' THEN
			UPDATE emp SET sal=sal*0.9 WHERE empno=emp_empno;
		END IF;
	END LOOP;
END;
6.
DECLARE
  CURSOR emp_cursor IS 
	       SELECT empno,hiredate FROM emp WHERE mgr=(SELECT empno FROM emp WHERE ename='BLAKE');
	v_empno emp.empno%TYPE;
	v_sal emp.sal%TYPE;
	v_hiredate DATE;
BEGIN
	OPEN EMP_CURSOR;
	LOOP
		FETCH emp_cursor INTO v_empno,v_hiredate;
		EXIT WHEN emp_cursor%NOTFOUND;
		IF EXTRACT(YEAR FROM v_hiredate)<1982 THEN
			UPDATE emp SET sal=sal*1.2 WHERE empno=v_empno;
		ELSE
			UPDATE emp SET sal=sal*1.1 WHERE empno=v_empno;
		END IF;
	END LOOP;
END;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章