oracle之PLSql語言(一)

沒腿的鳥發表於2017-09-20

 1、PLSQL語言

      PLSQL語言是ORACLE公司對SQL語言的功能的擴充套件,它是將過程性結構與ORACLE SQL無縫的整合在一起而產生的一種結構化的強有力的語言,是一種高階資料庫程式設計語言。

2、SQL*PLUS

    SQL*PLUS是ORACLE公司提供的一個工具程式,它用於執行SQL語句和PL/SQL塊,並且用於跟蹤、除錯SQL語句和PL/SQL塊。該工具程式不僅可以在命令列執行,也可以在WINDOWS視窗環境中執行。

 2.1 在命令列執行SQL*PLUS

      格式:sqlplus  [username]/[password][@SERVER]           

      其中:  username用於指定資料庫使用者名稱

                 password用於指定使用者口令

                 @SERVER用於指定主機字串或網路服務名,當連線到本地資料庫時,不需要提供網路服務名。

 2.2 在WINDOWS環境中執行SQL*PLUS

  2.2.1 具體方法:

          開始->程式->Oracle - OraDb10g_home1->應用程式開發->SQL PLUS

  2.2.2 在命令列執行SQLPLUSW命令

         格式:sqlplusw  [username]/[password][@SERVER]

 

2.3 SQL*PLUS的使用

 2.3.1 直接編輯:使用ED命令或在SQL>提示符下鍵入,以 / 退出,鍵入 / 或RUN執行行。

 2.3.2 使用檔案:@或START執行 .sql檔案。

 

例:查詢DEPT表中的所有行

例1、使用@命令

   SQL> @ d:/dept.sql;
 
   DEPTNO DNAME          LOC
   ------ -------------- -------------
       10 ACCOUNTING     NEW YORK
       20 RESEARCH       DALLAS
       30 SALES          CHICAGO
       40 OPERATIONS     BOSTON
例2、使用START命令
    SQL> start d:/dept.sql;
 
    DEPTNO DNAME          LOC
    ------ -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
 

3、PL/SQL塊的組成

  3.1 PL/SQL語言以塊為單位,塊中可以巢狀子塊。 

   3.2 一個基本的PL/SQL塊由3部分組成:

  • 定義部分(DECLARE):PL/SQL中使用的變數、常量、遊標、複雜資料型別、和異常處理的名字都必須先定義後使用,並且必須定義在以關鍵字DECLARE開頭的定義部分。

  • 執行部分 (BEGIN):該部分是PL/SQL塊的主體,包含該塊的可執行語句。該部分定義了塊的功能,是必須的。由關鍵字BEGIN開始,EXCEPTION或END結束。

  • 異常處理部分(EXCEPTION):該部分包含該塊的異常處理程式,當該塊程式體中的某個語句出現異常時,程式控制轉到異常部分的相應的異常處理程式中進行進一步的處理,該部分由關鍵字EXCEPTION開始,END關鍵字結束。
     declare
                      v_num   number  :=0;
               begin
                      v_num :=2/v_num;
                      dbms_output.put_line(v_num);
                exception
                       when others  then
                       dbms_ourput.put_line('error');
                end;
                 /
輸出結果為:error
 
DBMS_OUTPUT.PUT_LINE是依靠SQL*Plus命令Set Serveroutput ON來顯示輸出的。預設的Serveruotput已經關閉。

  3.3 定義部分

      簡單變數定義格式:

      <variable_name>  [constant]  <datatype>  [ [not null]  {default | :=}<exception>];

      例項:v_num   number  :=0;

    說明:

        ①定義部分是包括在關鍵字DECLARE和BEGIN之間的部分,每條語句後用';'結束。

        ②每行只能定義一個識別符號。

        ③如果加上關鍵字CONSTANT,則表示所定義的識別符號為一個常量,必須為它賦初始值。

        ④每個識別符號必須以字母開頭,而且不分大小寫。如果定義的識別符號不能為空,則必須加上關鍵字NOT NULL,並賦初始值。

        ⑤為識別符號賦值時,使用賦值符號':=',預設值為NULL。

 

4、 賦值語句

       賦值符號為':='

       格式:<變數名>:=<表示式>

5、ORACLE常用資料型別

     binary_integer:整數,主要用來計數而不是用來表示欄位型別

     number:數字型,範圍10-130~10125

     char:定長字元型,最大2000個字元。

     varchar2:變長字串,最大4000個字元。

     long:大文字,最大32760個字元,最長2G。

     date:日期型,包括年、月、日、時、分、秒。

     boolean:邏輯型,取值true、false、null,在plsql中不給初值,會被設定為null。在java中不給初值,設為false;

6、使用%TYPE

    使用%TYPE宣告一個變數,可以使它的型別與某個變數或資料庫基本表中某個列的資料型別一致。

例1:

declare
 
Ename emp.eNAME%TYPE;   //使其與emp表中的ename欄位的資料型別一致
 JOB Ename%TYPE;

BEGIN 
  select ename,job into Ename,job 
  from emp
  where empno=7369;
  DBMS_OUTPUT.PUT_LINE(Ename||' , '||job);
END;

輸出:SMITH , CLERK

7、定義Table變數型別(類似陣列)

格式:

Type    table變數名   is   table   of    <field> <datatype> [[not null]{default | :=}<expression>]   index  by  binary_integer;

例項:

 declare 

         type   type_table_emp_empno  is  table  of  emp.empno%Type  index  by  binary_integer;   //定義變數型別

         v_empnos  type_table_emp_empno;  //宣告使用定義的變數型別

begin 

         v_empnos(0) :=7369;

         v_empnos(2) :=7839;

         v_empnos(-1) :=9999;

         dbms_output.put_line(v_empnos(-1));

end;

定義Record變數型別(類似java中的類)即:定義與表結構資料型別一致的資料型別,再用這個型別宣告變數。就可以直接引用了,不用再挨個匹配各個欄位的資料型別,更加的方便。

  記錄型別定義的一般格式:

TYPE  <RecordTypeName>  IS  RECORD 

  (

       <field> <datatype> [[not null]{default | :=}<expression>]

       [,<field>......]

  );   

 

說明:記錄型別變數的屬性引用方法是' . '引用。

例1:

DECLARE
  TYPE abc IS RECORD   --定義記錄型別
  (
     aname emp.ename%type,
     ajob emp.job%type,
     adate emp.hiredate%type
  );
  a abc;  --定義記錄變數
BEGIN
  SELECT ENAME,JOB,HIREDATE INTO A.ANAME,A.AJOB,A.ADATE
    FROM EMP
      WHERE EMPNO=7369;
  DBMS_OUTPUT.put_line(A.ANAME||' , '||A.AJOB||' , '||A.ADATE);
END;

輸出:SMITH , CLERK , 17-12月-80

 

 8、使用%ROWTYPE

    使用%ROWTYEP宣告一個記錄型變數,可以使它的型別與某個基本表的資料結構一致。(就不用擔心表的結構發生變化了)

例1:

DECLARE
 A EMP%ROWTYPE;   //使用%type宣告record變數
BEGIN
  SELECT ENAME,JOB,HIREDATE INTO A.ENAME,A.JOB,A.HIREDATE
    FROM EMP
      WHERE EMPNO=7369;
  DBMS_OUTPUT.put_line(A.ENAME||' , '||A.JOB||' , '||A.HIREDATE);
END;

輸出:SMITH , CLERK , 17-12月-80

相關文章