posts - 84,  comments - 54,  trackbacks - 0

          1、?編寫一個程序塊,從emp表中顯示名為’SMITH’的雇員的薪水和職位。
          ?SET SERVEROUTPUT ON
          ?declare
          ?v_sal emp.sal%type;
          ?v_job emp.job%type;

          ?begin
          ?select sal,job into v_sal,v_job from emp where ename = 'SMITH';
          ?DBMS_OUTPUT.put_line(v_sal||' '||v_job);
          ?END;

          提示用戶輸入'SMITH'
          ?SET SERVEROUTPUT ON
          ?declare
          ?v_sal emp.sal%type;
          ?v_job emp.job%type;
          ?v_name emp.ename%type:='&v_name';--此處在外面加入單引號,這樣在輸入的時候就直接可以輸入字符串了

          ?begin
          ?select sal,job into v_sal,v_job from emp where ename = v_name;
          ?DBMS_OUTPUT.put_line(v_sal||' '||v_job);
          ?END;

          2、?編寫一個程序塊,接受用戶輸入的一個部門號,從dept表中顯示該部門的名稱與所在的位置。
          ?SET SERVEROUTPUT ON
          ?declare
          ?v_dname? dept.dname%type;
          ?v_loc? dept.loc%type;
          ?v_deptno? dept.deptno%type:=&v_deptno;

          ?begin
          ?select dname,loc into v_dname,v_loc from dept where deptno = v_deptno;
          ?DBMS_OUTPUT.put_line(v_dname||'+'||v_loc);

          ?EXCEPTION
          ?WHEN no_data_found THEN
          ?DBMS_OUTPUT.put_line('您輸入的部門號不存在!');

          ??end;

          3、?接受兩個數相除并且顯示結果,如果第二個數為0,則顯示消息“除數不能為0”。

          ?SET SERVEROUTPUT ON
          ?DECLARE
          ?v_divsor REAL:=&v_divsor;--除數
          ?v_dividend REAL:=&v_dividend;--被除數
          ?v_result REAL;
          ?
          ?BEGIN
          ?v_result := v_dividend/v_divsor;
          ?DBMS_OUTPUT.put_line('結果為'||v_result);

          ?EXCEPTION
          ?WHEN ZERO_DIVIDE THEN
          ?DBMS_OUTPUT.put_line('除數不能為零');
          ?END;

          4、?編寫一個程序塊,接受一個雇員名,從emp表中顯示該雇員的工作崗位與薪水,若輸入的雇員名不存在,顯示“該雇員不存在”信息。

          ?SET SERVEROUTPUT ON
          ?DECLARE
          ?v_job emp.job%type;
          ?v_sal emp.sal%type;
          ?v_ename emp.ename%type:='&v_ename';--輸入員工姓名

          ?BEGIN
          ?select job,sal into v_job,v_sal from emp where ename = v_ename;
          ?DBMS_OUTPUT.put_line('員工工作'||v_job||'員工薪水'||v_sal);

          ?EXCEPTION
          ?WHEN NO_DATA_FOUND THEN
          ?DBMS_OUTPUT.put_line('您要查找的員工不存在.');?

          ?END;?

          5、?編寫一個程序塊,利用%type屬性,接受一個雇員號,從emp表中顯示該雇員的整體薪水(即,薪水+傭金)

          ?SET SERVEROUTPUT ON
          ?DECLARE
          ?v_empno emp.empno%type:=&v_empno;--輸入員工編號
          ?v_saladdcomm emp.sal%type;
          ?v_sal emp.sal%type;
          ?v_comm?emp.comm%type;
          ?
          ?BEGIN
          ?select?sal,comm into v_sal,v_comm from emp where empno = v_empno;

          ?v_saladdcomm := v_sal + NVL(v_comm,0);--這里需要用到NVL函數,如果v_comm為NULL的話則設為0
          ????????????????????????????????????????????????????????????????????--否則如果v_comm為空的話,計算出來的值則為空???????????????????????????

          ?DBMS_OUTPUT.put_line(v_empno||'的整體薪水是:'||v_saladdcomm);

          ?EXCEPTION
          ?WHEN NO_DATA_FOUND THEN
          ?DBMS_OUTPUT.put_line('您要查找的員工編號不存在!');

          ?END;

          posted on 2006-09-05 21:42 JavaCoffe 閱讀(1110) 評論(1)  編輯  收藏 所屬分類: Oralce&&PL/SQL


          FeedBack:
          # re: PLSQL小例子
          2006-09-09 16:13 | 徐海東
          6、 編寫一個程序塊,將emp表中前5人的名字顯示出來。

          不知道不使用游標的方法能否做出來

          以下為使用游標的方法

          1>使用for 循環實現
          DECLARE
          CURSOR c_emp IS select ename from emp where rownum < 6;

          BEGIN

          FOR v_emp IN c_emp LOOP
          DBMS_OUTPUT.put_line(v_emp.ename);
          END LOOP;

          END;

          2>使用while方法
          DECLARE
          CURSOR c_emp IS select ename from emp where rownum < 6;
          v_ename emp.ename%type;
          v_count number:=1;

          BEGIN
          OPEN c_emp;
          while v_count < 6 loop

          fetch c_emp into v_ename;
          DBMS_OUTPUT.put_line(v_ename);
          v_count := v_count+1;

          end loop;
          close c_emp;
          end;

          使用while的第二種用法

          DECLARE
          CURSOR c_emp IS select ename from emp where rownum < 6;
          v_ename emp.ename%type;

          BEGIN
          OPEN c_emp;
          fetch c_emp into v_ename;

          --剛開始要讓游標向下移動一行接下來才能判斷是否已經
          --取道到一行紀錄

          while c_emp%found loop

          DBMS_OUTPUT.put_line(v_ename);
          fetch c_emp into v_ename;

          end loop;

          close c_emp;
          end;
          3>使用LOOP循環的方法
          set serveroutput on
          DECLARE
          CURSOR c_emp IS select ename from emp where rownum < 6;
          v_ename emp.ename%type;

          BEGIN
          OPEN c_emp;

          LOOP
          fetch c_emp into v_ename;
          DBMS_OUTPUT.put_line(v_ename);
          EXIT WHEN c_emp%notfound;
          END LOOP;

          CLOSE c_emp;
          END;

          7、 某公司要根據雇員的職位來加薪,公司決定按如下列加薪結構處理:
          Designation Raise
          Clerk 500
          Salesman 1000
          Analyst 1500
          Otherwise 2000
          編寫一個程序塊,接受一個雇員名,從emp表中實現上述加薪處理。
          set serveroutput on
          DECLARE
          v_ename emp.ename%type:='&v_ename';
          v_job emp.job%type;
          v_addSal emp.sal%type;--額外增加的工資
          v_sal emp.sal%type;

          BEGIN
          select job into v_job from emp where ename = v_ename;
          select sal into v_sal from emp where ename = v_ename;

          IF v_job = 'Clerk' then

          v_addSal := 500;
          elsif v_job = 'Salesman' then
          v_addSal := 1000;
          elsif v_job = 'Analyst' then
          v_addSal := 1500;
          else
          v_addSal := 2000;

          END IF;

          v_addSal := v_addSal + v_sal;
          UPDATE emp SET sal = v_addSal where ename = v_ename;
          END;

          8、 使用For循環游標,接受一個部門號,從emp表中顯示該部門的所有雇員的姓名,工作和薪水。
          set serveroutput on
          DECLARE
          v_deptno emp.deptno%type:=&v_deptno;
          v_ename emp.ename%type;
          v_job emp.job%type;
          v_sal emp.sal%type;

          CURSOR c_emp IS select ename,job,sal from emp where deptno = v_deptno;


          BEGIN
          DBMS_OUTPUT.put_line('deptno'||' '||'ename'||' '||'job'||' '||'sal');
          for v_emp IN c_emp LOOP
          DBMS_OUTPUT.put_line(v_deptno||' '||v_emp.ename||' '||v_emp.job||' '||v_emp.sal);
          END LOOP;

          END;  回復  更多評論
            
          <2006年9月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          留言簿(5)

          隨筆分類(80)

          收藏夾(1)

          最新隨筆

          積分與排名

          • 積分 - 58638
          • 排名 - 893

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 新泰市| 基隆市| 资中县| 宁乡县| 长武县| 新干县| 特克斯县| 舞阳县| 前郭尔| 迁安市| 巴东县| 宝鸡市| 宕昌县| 文登市| 盘山县| 庆云县| 兴安盟| 北川| 德格县| 平果县| 鹤山市| 延寿县| 沭阳县| 泾川县| 广宁县| 时尚| 获嘉县| 敦煌市| 鄂托克旗| 墨竹工卡县| 玛曲县| 鄱阳县| 湟源县| 灵丘县| 鄢陵县| 平江县| 民勤县| 清原| 喀什市| 保德县| 安吉县|