PL/SQL程式設計基礎知識(一)
阿新 • • 發佈:2018-11-02
--PL/SQL變數的宣告和賦值 declare v_ename varchar2(30);--定義變數 begin v_ename:='&請輸入名字';--接受鍵盤輸入 dbms_output.put_line(v_ename); end; --put_line :列印換行 ; put :列印不換行 --接受數字輸入,第一行輸出若使用不換行列印造成輸出失敗 declare v_num number; begin v_num:=22;--直接賦值 dbms_output.put_line(v_num); end; --變數中接受表的型別 declare v_ename scott.emp.ename%type;--宣告為scott使用者emp表ename欄位型別 begin select ename into v_ename from emp where empno=7369;--使用select into給變數賦值 dbms_output.put_line(v_ename); end; --行結果集型別 declare v_emprow scott.emp%rowtype;--v_emprow的型別為scott使用者emp表的行型別 begin select * into v_emprow from emp where empno=7369; dbms_output.put_line('員工姓名'||v_emprow.ename||' 員工薪水'||v_emprow.sal);--oracle字元連線使用||符號 end; --if選擇結構 declare v_score number; begin v_score:='&請輸入oracle資料成績'; if v_score>90 then dbms_output.put_line('獎勵大大的'); elsif v_score>80 then dbms_output.put_line('中等');--注意:oracle中的 elsif 和其他程式語言不一樣:其中缺少一個e else dbms_output.put_line('繼續努力'); end if;--if語句塊需要手動結束 end; --case語句結構 declare v_ename scott.emp.ename%type; v_deptno scott.emp.deptno%type; begin v_ename:='&請輸入員工姓名'; select deptno into v_deptno from emp where ename=v_ename; case v_deptno when 10 then dbms_output.put_line('10'); when 20 then dbms_output.put_line('20'); when 40 then dbms_output.put_line('30'); else dbms_output.put_line('無'); end case; end; select * from dept; SELECT * FROM EMP; create table grades( id number, name varchar2(30), course varchar2(30), grade number(5,2) ); insert into grades(id,name,course,grade) values(1,'鄒忌第','語文',90); insert into grades(id,name,course,grade) values(2,'鄒忌第','數學',90); insert into grades(id,name,course,grade) values(3,'鄒忌第','外語',90); insert into grades(id,name,course,grade) values(4,'鄒忌第','物理',90); insert into grades(id,name,course,grade) values(5,'男生與我','語文',90); insert into grades(id,name,course,grade) values(6,'男生與我','數學',90); insert into grades(id,name,course,grade) values(7,'男生與我','外語',90); insert into grades(id,name,course,grade) values(8,'海軍','語文',90); insert into grades(id,name,course,grade) values(9,'海軍','數學',90); insert into grades(id,name,course,grade) values(10,'海軍','外語',90); select * from grades; --行轉列 select name, sum(case when course='語文' then grade else 0 end) as 語文, sum(case when course='數學' then grade else 0 end) as 數學, sum(case when course='外語' then grade else 0 end) as 外語, sum(case when course='物理' then grade else 0 end) as 物理 from grades group by name; --LOOP迴圈 至少執行一次 declare v_num1 number; v_num2 number; begin v_num1:='&請輸入數值1'; v_num2:='&請輸入數值2'; loop dbms_output.put_line(v_num1); v_num1:=v_num1+1; exit when v_num1>v_num2;--退出條件 end loop; exception when others then dbms_output.put_line('unknown exception occurred'); dbms_output.put_line(sqlcode);--輸出異常對應的編號 dbms_output.put_line(sqlerrm);--輸出異常對應的資訊 end; --while迴圈 使用最多 最為靈活 declare v_num1 number; v_num2 number; begin v_num1:='&請輸入數值1'; v_num2:='&請輸入數值2'; while v_num1<v_num2 loop dbms_output.put_line(v_num1); v_num1:=v_num1+1; end loop; exception when others then dbms_output.put_line('unknown exception occurred'); dbms_output.put_line(sqlcode);--輸出異常對應的編號 dbms_output.put_line(sqlerrm);--輸出異常對應的資訊 end; --for迴圈 declare v_num1 number; v_num2 number; begin v_num1:='&請輸入數值1'; v_num2:='&請輸入數值2'; for v_result in v_num1.. v_num2 loop --for 變數名 in 迴圈的範圍 loop dbms_output.put_line(v_result);--對變數進行操作 end loop; exception when others then dbms_output.put_line('unknown exception occurred'); dbms_output.put_line(sqlcode);--輸出異常對應的編號 dbms_output.put_line(sqlerrm);--輸出異常對應的資訊 end;