Oracle入门(十四)之PL/SQL
生活随笔
收集整理的這篇文章主要介紹了
Oracle入门(十四)之PL/SQL
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、PL/SQL 基本語法
PL/SQL語言是模塊式的過程化SQL,是oracle公司對SQL的擴(kuò)展。
(1)
(2)
(3)
(5)
(6)
(7)數(shù)據(jù)類型
- Number 數(shù)字型
- Varchar2 變長字符型,最大32767個字符
- Date 日期型
- Boolean 布爾型(TRUE,FALSE,NULL三者取一)
- Char 定長字符型,最大32767個字符
- Int 整數(shù)型
- Pls_integer 整數(shù)型,產(chǎn)生溢出時出現(xiàn)錯誤
- Binary_integer 整數(shù)型,表示帶符號的整數(shù)
- Long 變長字符型,最長2GB
(8)標(biāo)識符
?用來命名常量、變量、游標(biāo)、程序和包1)必須以字母(A-Z)開頭
2)其后跟字母、數(shù)字(0-9)或特殊字符$#_
3)標(biāo)識符不超過30字符
4)標(biāo)識符中不包含空格
5)標(biāo)識符不能為保留字
6)標(biāo)識符不區(qū)分大小寫
非法標(biāo)識符:12_sal; first-name; sec name;
(9)變量的定義
?變量名 數(shù)據(jù)類型 [not null] [:= 值]例1: vn_snum number;
例2: vs_name varchar2(10);
例3: vn_sid tab_server.sid%type ;? ?--錨定列
(10)常量定義
?常量名 constant 數(shù)據(jù)類型 [not null] :=值
?例1:vn_num constant number := 10;
(11)
(12)賦值語句: 賦值語句?包括直接賦值和間接賦值
?直接賦值 v_num := 20000;
?間接賦值(select into、fetch into)
?select max(innum), min(innum)
?into v_max, v_min
?from tab_ingoods;
二、應(yīng)用案例
編寫一個匿名塊程序?qū)崿F(xiàn):
根據(jù)一個員工姓名的本月績效(變量初始值為10)計算并輸出該員工本月收入
本月收入=基本工資(salary)+傭金百分比(COMMISSION_PCT)*績效
set serveroutput on --dbms_output 輸出有效,用在sql developer declarev_b number:=10; --初始值v_lastname varchar2(10):=‘XXX';-- v_firstname employees.first_name%type; --錨定變量v_salary number(6,2); beginselect nvl(salary,0)+nvl(COMMISSION_PCT,0)*v_binto v_salary --間接賦值from employees where last_name=v_lastname;dbms_output.put_line(v_lastname||'本月的工資為:'||v_salary); end;三、PL/SQL 基本結(jié)構(gòu)
(1)條件控制語句?
declaretheGrade number:= 88; beginif theGrade>=90 thendbms_output.put_line('杰出');elsif theGrade>=80 thendbms_output.put_line('優(yōu)秀');elsif theGrade>=60 thendbms_output.put_line('合格');elsedbms_output.put_line('不及格');end if; end;(2)循環(huán)
簡單循環(huán)
set serveroutput on; declarei number(8):=5; begin<<first_loop>>loopdbms_output.put_line('i = '||i);i:= i-1;exit first_loop when i = 0;end loop;dbms_output.put_line('LOOP循環(huán)已經(jīng)結(jié)束!'); end;For循環(huán) beginFor循環(huán)for i in -3..3 loopdbms_output.put_line('i = '||i);end loop;dbms_output.put_line('FOR循環(huán)已經(jīng)結(jié)束!'); end;While循環(huán) declarei number(8):=5; While循環(huán) beginwhile(i > 0) loopdbms_output.put_line('i = '||i);i:=i-1;end loop while_loop;dbms_output.put_line('WHILE循環(huán)已經(jīng)結(jié)束!'); end;Case語句
set serveroutput Case語句on declaregender varchar2(20):= '男'; begincase genderwhen '男' then dbms_output.put_line('勇敢');when '女' then dbms_output.put_line('漂亮');else dbms_output.put_line('人妖');end case; end;Goto語句?
DECLAREi number; BEGINi:=5;<<repeat_loop>> --循環(huán)點(diǎn)DBMS_OUTPUT.PUT_LINE('i='||i);i:=i-1;IF i>0 THENGOTO repeat_loop; --小于5,就goto到repeat_loopEND IF; END;注:Oracle入門(十四A)之PL/SQL 基本結(jié)構(gòu)
四、異常處理
DECLARE?v_empno employees.employee_id%TYPE:= &empno;v_sal employees.salary%TYPE; BEGINSELECT salary INTO v_sal FROM employeesWHERE employee_id = v_empno;IF v_sal<=15000 THENdbms_output.put_line('編碼為'||v_empno||'員工該加100元!');ELSEdbms_output.put_line('編碼為'||v_empno||'員工工資已經(jīng)超過規(guī)定值!');END IF; EXCEPTIONWHEN NO_DATA_FOUND THENdbms_output.put_line('數(shù)據(jù)庫中沒有編碼為'||v_empno||'的員工');WHEN TOO_MANY_ROWS THENdbms_output.put_line('程序運(yùn)行錯誤!請使用游標(biāo)');WHEN OTHERS THENdbms_output.put_line(SQLCODE||'---'||SQLERRM); END;注:Oracle入門(十四B)之PL/SQL異常處理
總結(jié)
以上是生活随笔為你收集整理的Oracle入门(十四)之PL/SQL的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle入门(九A)之用户的权限或角
- 下一篇: Oracle入门(十四B)之PL/SQL