PL/SQL-PL/SQL塊、數據類型、變量常量

爲了瞭解Oracle的語法,PL/SQL是必須要學習的。PL/SQL(Procedural Language SQL)是一種過程化語言,是Oracle的專用語言,是對標準SQL的拓展。

1、PL/SQL塊結構

declare --聲明部分(可選)

begin  --執行部分(必須)

exception  --異常部分(可選)

end;
  1. 聲明部分
    聲明PL/SQL程序塊中使用的變量常量遊標,都爲局部聲明,不能在其他PL/SQL塊中使用。
  2. 執行部分
    以begin開始,結束有兩種方式。
    ①如果PL/SQL塊中的代碼執行出現異常,則執行異常部分代碼,並結束。
    ②如果沒有使用異常處理,或者PL/SQL塊未出現異常,則以end結束。
  3. 異常部分
    通過編寫一定量的代碼來糾正錯誤或給用戶提供一些錯誤信息提示,甚至是將各種數據操作回滾到異常產生之前的狀態,以便重新運行代碼。

注意:

  • 每條語句均以分號結束
  • 每條SQL均以分號結束
  • 一行可以有多條SQL,但每條SQL之間都要以分號分隔。
-- 以下代碼只能在sqlplus或者PL/SQL Developer的命令窗口中執行。
set serveroutput on --爲了使dbms_output.put_line()函數的輸出顯示在屏幕上,必須運行該語句。
declare
  a int:=100;
  b int:=200;
  c number;
begin
  c:=(a+b)/(a-b);
  dbms_output.put_line(c);
exception
  when zero_divide then
    dbms_output.put_line('除數不能爲0!');
end;
/

單行註釋:

-- 單行註釋

多行註釋:

/*
多行註釋
*/

標識符:只有下面列出的標識符才能在PL/SQL程序塊中使用。

標識符 具體包含
大小寫字母 A~Z或 a~z
數字 0~9
非顯示的字符 製表符、空格、回車
數學符號 +,-,*,/,>,<,=等
間隔符 (),{},[],?,!,;,:,@,#,%,$,&等

2、數據類型和定義變量和常量

數據類型:用來描述數據存儲的內存結構,決定變量中所存儲的數據的類型。
變量:用名稱進行標識的符號,可以存儲不同的數據類型,其值在程序運行過程中可以改變。
常量:與變量相對應,其值在運行過程中不可以改變。

基本數據類型

  1. 數值類型
    number(p,s):存儲整數和浮點數。p位有效數字,保留s位小數。
    pls_integer:存儲整數
    binary_integer:存儲整數
  2. 字符類型
    ①varchar2(n):用於存儲可變長度的字符串
    PL/SQL中n的最大值爲32767字節,而數據庫中的n最大值爲4000個字節,所以不能將一個長度大於4000的PL/SQL類型varchar2變量賦值給數據庫中的一個varchar2變量,只能賦值給數據庫類型long變量。
    ②char(n):用於存儲指定長度的字符串
    PL/SQL中n的最大值爲32767字節,而數據庫中的n最大值爲2000個字節,所以不能將一個長度大於2000的PL/SQL類型char變量賦值給數據庫中的一個char變量。
    ③long:用於存儲可變長度的字符串
    PL/SQL中long類型最大長度爲32767,數據庫類型long最大長度爲2G,所以任意一個PL/SQL類型long變量都可以賦予數據庫類型long變量。
    ④nchar:長度據情況而定(國際版)
    ⑤nvarchar2:長度據情況而定(國際版)
  3. 日期類型
    date:用來存儲日期和時間數據。分別使用一個字節存儲:世紀、年、月、日、時、分、秒
  4. 布爾類型
    boolean:主要用於流程控制和業務判斷。其變量值爲:true、false、null的一種

特殊數據類型

  1. %type類型
    指定列的類型
    變量var_job的類型和emp表的job列的數據類型相同
declare
var_job emp.job%type;
set serverpoutput on
declare
var_ename emp.ename%type;
var_job emp.job%type;
begin
  select ename,job into var_ename,var_job from emp where empno=7369;
  dbms_output.put_line(var_ename||'的工作是'||var_job);
end;
/
  1. record類型
    指定列的集合,將列的集合定義成一個record類型的變量
    思考一個問題:
    可以將一個值賦予一個%type類型的變量,如果要賦予10000個值,就要在declare中聲明10000個%type類型的變量,在賦值語句中編寫很長的代碼,這樣的運行效率是很差的,也很麻煩。
    而record類型的變量極大縮短了代碼,也提高了效率。
set serveroutput on
declare
type emp_type is record(  --定義一種名爲emp_type的record類型
var_ename emp.ename%type,
var_job emp.job%type,
var_sal emp.sal%type
); --以分號結束
empinfo emp_type;   -- 聲明emp_type類型的變量empinfo
begin
  select ename,job,sal into empinfo from emp where empno=7369; --一條賦值語句,將三個值賦給該變量
  dbms_output.put_line('職工'||empinfo.var_ename||'的職務 是'||empinfo.var_job||',工資是'||empinfo.var_sal); --使用該變量內的變量,要使用調用的方式。
end;
/
  1. %rowtype類型
    該數據類型包含一個表的所有列的類型,可以將一行數據存儲在該數據類型的變量中
set serveroutput on
declare
  var_emp emp%rowtype;
begin
  select * into var_emp from emp where empno=7369;
  dbms_output.put_line('僱員'||var_emp.ename||'的編號是'||var_emp.empno||',工作是'||var_emp.job);
end;
/

三種特殊數據類型的比較:

  • %type存 一行一列值
  • record存一行任意列值
  • %rowtype存一行全部列值

定義變量和常量

1、定義變量,可以有初始值
2、定義常量,必須有值
常量和變量都只能在PL/SQL塊的declare中定義,單獨無法定義。

set serveroutput on
declare
var_name varchar2(10):='Abong';
var_name1 constant varchar2(10):='ABong';
begin
  dbms_output.put_line(var_name||''||var_name1);
end;
/
發佈了26 篇原創文章 · 獲贊 17 · 訪問量 7588
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章