国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

PL/SQL程序結構(組圖)

2024-07-21 02:33:16
字體:
來源:轉載
供稿:網友

  什么是PL/SQL程序
  
  前面第4章學習的標準化的SQL語言對數據庫進行各種操作,每次只能執(zhí)行一條語句,語句以英文的分號“;”為結束標識,這樣使用起來很不方便,同時效率較低,這是因為Oracle數據庫系統(tǒng)不像VB、VC這樣的程序設計語言, 它側重于后臺數據庫的治理,因此提供的編程能力較弱,而結構化編程語言對數據庫的支持能力又較弱,假如一些稍微復雜點的治理任務都要借助編程語言來實現(xiàn)的話,這對治理員來講是很大的負擔。
  
  正是在這種需求的驅使下,從Oracle 6開始,Oracle公司在標準SQL語言的基礎上發(fā)展了自己的PL/SQL(PRocedural Language/SQL,過程化SQL語言)語言,將變量、控制結構、過程和函數等結構化程序設計的要素引入了SQL語言中,這樣就能夠編制比較復雜的SQL程序了,利用PL/SQL語言編寫的程序也稱為PL/SQL程序塊。
  
  PL/SQL程序塊的主要特點如下。
  
  具有模塊化的結構。
  
  使用過程化語言控制結構。
  
  能夠進行錯誤處理。
  
  PL/SQL程序塊只能在【SQL Plus】、【SQLPlus Worksheet】等工具支持下以解釋型方式執(zhí)行,不能編譯成可執(zhí)行文件,脫離支撐環(huán)境執(zhí)行。
  
  PL/SQL實例分析
  
  下面將為前面建立的tempuser用戶建立一個名為testtable的數據表。
  
  在該表中有recordnumber整數型字段和currentdate時間型字段,編制一個PL/SQL程序完成向該表中自動輸入100個記錄,要求recordnumber字段從1到100,currentdate字段為當前系統(tǒng)時間。
  
  (1)前面建立的tempuser用戶默認的表空間為USERS,因此,要想使該用戶能夠使用表空間建立數據方案對象,必須首先給其賦予名為“RESOURCE”的角色。
  
  (2)以system用戶、SYSDBA身份登錄數據庫后,在【企業(yè)治理器】中按照修改用戶的步驟進行操作,直到出現(xiàn)如圖9.1所示的編輯用戶的【角色】選項卡。
  
  在【可用】下拉列表框中選擇“RESOURCE”,單擊【箭頭向下】按鈕將其添加到【已授予】列表框中。【默認值】單元格被選中,單擊“確定”按鈕。
  
 PL/SQL程序結構(組圖)(圖一)

   (3)讀者也可以在【SQLPlus Worksheet】中直接執(zhí)行如下SQL代碼完成上述操作。
  ―――――――――――――――――――――――――――――――――――――
  GRANT "RESOURCE" TO "TEMPUSER";
  ALTER USER "TEMPUSER" DEFAULT ROLE ALL
  ―――――――――――――――――――――――――――――――――――――
  【配套程序位置】:第9章/grantrole.sql。
  
  (4)按照創(chuàng)建數據表的操作步驟進行,直到出現(xiàn)如圖9.2所示的創(chuàng)建表的【一般信息】選項卡。
  
  在【名稱】文本框中輸入“testable”。
  在【方案】下拉列表框中選擇“tempuser”。
  在【表空間】下拉列表框中選擇“users”。
  選擇【表】/【標準】單選鈕。
  選擇【定義列】單選鈕。
  在【表列定義區(qū)】中輸入兩個數據列的定義。
  完成設置后單擊【創(chuàng)建】按鈕。
  
 PL/SQL程序結構(組圖)(圖二)

  (5)讀者也可以在【SQLPlus Worksheet】中直接執(zhí)行如下SQL代碼完成上述操作。
  ―――――――――――――――――――――――――――――――――――――
  CREATE TABLE "TEMPUSER"."TESTTABLE" ("RECORDNUMBER" NUMBER(4) NOT
  NULL, "CURRENTDATE" DATE NOT NULL)
  TABLESPACE "USERS"
  ―――――――――――――――――――――――――――――――――――――
  【配套程序位置】:第9章/createtesttable.sql。
  
  (6)以tempuser用戶身份登錄【SQLPlus Worksheet】,執(zhí)行下列SQL代碼完成向數據表tempuser.testable中輸入100個記錄的功能。執(zhí)行結果如圖9.3所示。
  ―――――――――――――――――――――――――――――――――――――
  set serveroutput on
  declare
  maxrecords constant int:=100;
  i int :=1;
  begin
  for i in 1..maxrecords loop
  insert into tempuser.testtable(recordnumber,currentdate)
  values(i,sysdate);
  end loop;
  dbms_output.put_line('成功錄入數據!');
  commit;
  end;
  ―――――――――――――――――――――――――――――――――――――
  【配套程序位置】:第9章/inserttesttable.sql。

  
 PL/SQL程序結構(組圖)(圖三)

  (7)在【SQLPlus Worksheet】中執(zhí)行下列語句,查詢插入的數據,結果如圖9.4所示。
  ―――――――――――――――――――――――――――――――――――――
  select * from tempuser.testtable;
  ―――――――――――――――――――――――――――――――――――――
  【配套程序位置】:第9章/selecttesttable.sql。
  
 PL/SQL程序結構(組圖)(圖四)

  對完成上述數據插入過程的PL/SQL程序的分析如表9.1所示。
  
  表9.1 PL/SQL實例代碼分析
  
  程序代碼 說明
  set serveroutput on 答應服務器輸出
  declare 定義部分標識
  maxrecords constant int:=100; 定義maxrecords為整型常量100
  i int :=1; 定義i為整型值變量,初值為1
  Begin 執(zhí)行部分標識
  for i in 1..maxrecords loop i從1循環(huán)到maxrecords
  Insert into tempuser.testtable(recordnumber,currentdate) values (i,sysdate); 向數據表中插入數據
  end loop; 結束循環(huán)
  dbms_output.put_line('成功錄入數據!'); 顯示成功錄入數據信息
  commit; 提交結果
  end; 結束執(zhí)行
  
  表中的sysdate為系統(tǒng)時間函數;dbms_output為系統(tǒng)默認的程序包,put_line為包中定義的方法,功能是輸出信息;在Oracle中,所有對數據庫數據的更改并沒有直接操作數據庫,而是放在叫工作區(qū)的內存里,只有在commit語句執(zhí)行后,才發(fā)生永久更改。
  
  PL/SQL程序結構
  
  結合上述實例進行分析,完整的PL/SQL程序結構可以分為3個部分。
  
  1. 定義部分
  以Declare為標識,在該部分中定義程序中要使用的常量、變量、游標和例外處理名稱,PL/SQL程序中使用的所有定義必須在該部分集中定義,而在高級語言里變量可以在程序執(zhí)行過程中定義。
  
  2. 執(zhí)行部分
  以begin為開始標識,以end為結束標識。該部分是每個PL/SQL程序所必備的,包含了對數據庫的操作語句和各種流程控制語句。
  
  3. 異常處理部分
  該部分包含在執(zhí)行部分里面,以exception為標識,對程序執(zhí)行中產生的異常情況進行處理。一個完整的PL/SQL程序的總體結構如圖9.5所示。
  
 PL/SQL程序結構(組圖)(圖五)

  有的程序比較簡單,往往省略異常處理部分。下面開始介紹PL/SQL的一些基本語法要素。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 成武县| 甘泉县| 乐安县| 扶风县| 沅陵县| 峨眉山市| 天峻县| 鄂托克前旗| 邵阳县| 神木县| 永胜县| 九龙坡区| 马公市| 黎城县| 怀柔区| 镇赉县| 江油市| 宽甸| 长岭县| 泰兴市| 株洲县| 扶风县| 格尔木市| 阿图什市| 卢龙县| 汉阴县| 红河县| 三江| 营山县| 大田县| 宣城市| 沛县| 股票| 德钦县| 肇源县| 盐山县| 金坛市| 大足县| 龙陵县| 和林格尔县| 馆陶县|