【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;


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