專注于能源、電力等資產(chǎn)密集型行業(yè)管理及信息化建設(shè)
EAM、ERP、ITS
從Oracle 6開始,Oracle公司在標準SQL語言的基礎(chǔ)上發(fā)展了自己的PL/SQL(Procedural Language/SQL,過程化SQL語言)語言,將變量、控制結(jié)構(gòu)、過程和函數(shù)等結(jié)構(gòu)化程序設(shè)計的要素引入了SQL語言中,這樣就能夠編制比較復(fù)雜的 SQL程序了,利用PL/SQL語言編寫的程序也稱為PL/SQL程序塊。 PL/SQL程序塊的主要特點如下。 具有模塊化的結(jié)構(gòu)。 使用過程化語言控制結(jié)構(gòu)。 能夠進行錯誤處理。 PL/SQL程序塊只能在【SQL Plus】、【SQLPlus Worksheet】等工具支持下以解釋型方式執(zhí)行,不能編譯成可執(zhí)行文件,脫離支撐環(huán)境執(zhí)行。PL/SQL實例分析 下面將為前面建立的tempuser用戶建立一個名為testtable的數(shù)據(jù)表。 在該表中有recordnumber整數(shù)型字段和currentdate時間型字段,編制一個PL/SQL程序完成向該表中自動輸入100個記錄,要求recordnumber字段從1到100,currentdate字段為當(dāng)前系統(tǒng)時間。 (1)前面建立的tempuser用戶默認的表空間為USERS,因此,要想使該用戶能夠使用表空間建立數(shù)據(jù)方案對象,必須首先給其賦予名為“RESOURCE”的角色。 (2)以system用戶、SYSDBA身份登錄數(shù)據(jù)庫后,在【企業(yè)管理器】中按照修改用戶的步驟進行操作,直到出現(xiàn)如圖9.1所示的編輯用戶的【角色】選項卡。 在【可用】下拉列表框中選擇“RESOURCE”,單擊按鈕將其添加到【已授予】列表框中。【默認值】單元格被選中,單擊“確定”按鈕。 (3)讀者也可以在【SQLPlus Worksheet】中直接執(zhí)行如下SQL代碼完成上述操作。 ――――――――――――――――――――――――――――――――――――― GRANT "RESOURCE" TO "TEMPUSER"; ALTER USER "TEMPUSER" DEFAULT ROLE ALL ――――――――――――――――――――――――――――――――――――― 【配套程序位置】:第9章\grantrole.sql。 (4)按照創(chuàng)建數(shù)據(jù)表的操作步驟進行,直到出現(xiàn)如圖9.2所示的創(chuàng)建表的【一般信息】選項卡。 在【名稱】文本框中輸入“testable”。 在【方案】下拉列表框中選擇“tempuser”。 在【表空間】下拉列表框中選擇“users”。 選擇【表】/【標準】單選鈕。 選擇【定義列】單選鈕。 在【表列定義區(qū)】中輸入兩個數(shù)據(jù)列的定義。 完成設(shè)置后單擊按鈕。 (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代碼完成向數(shù)據(jù)表tempuser.testable中輸入100個記錄的功能。執(zhí)行結(jié)果如圖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('成功錄入數(shù)據(jù)!'); commit; end; ――――――――――――――――――――――――――――――――――――― 【配套程序位置】:第9章\inserttesttable.sql。 (7)在【SQLPlus Worksheet】中執(zhí)行下列語句,查詢插入的數(shù)據(jù),結(jié)果如圖9.4所示。 ――――――――――――――――――――――――――――――――――――― select * from tempuser.testtable; ――――――――――――――――――――――――――――――――――――― 【配套程序位置】:第9章\selecttesttable.sql。 對完成上述數(shù)據(jù)插入過程的PL/SQL程序的分析如表9.1所示。表9.1 PL/SQL實例代碼分析
表中的sysdate為系統(tǒng)時間函數(shù);dbms_output為系統(tǒng)默認的程序包,put_line為包中定義的方法,功能是輸出信息;在Oracle 中,所有對數(shù)據(jù)庫數(shù)據(jù)的更改并沒有直接操作數(shù)據(jù)庫,而是放在叫工作區(qū)的內(nèi)存里,只有在commit語句執(zhí)行后,才發(fā)生永久更改。PL/SQL程序結(jié)構(gòu) 結(jié)合上述實例進行分析,完整的PL/SQL程序結(jié)構(gòu)可以分為3個部分。 1. 定義部分 以Declare為標識,在該部分中定義程序中要使用的常量、變量、游標和例外處理名稱,PL/SQL程序中使用的所有定義必須在該部分集中定義,而在高級語言里變量可以在程序執(zhí)行過程中定義。 2. 執(zhí)行部分 以begin為開始標識,以end為結(jié)束標識。該部分是每個PL/SQL程序所必備的,包含了對數(shù)據(jù)庫的操作語句和各種流程控制語句。 3. 異常處理部分 該部分包含在執(zhí)行部分里面,以exception為標識,對程序執(zhí)行中產(chǎn)生的異常情況進行處理。一個完整的PL/SQL程序的總體結(jié)構(gòu)如圖9.5所示。 有的程序比較簡單,往往省略異常處理部分。
posted on 2005-11-05 13:24 大樹 閱讀(266) 評論(0) 編輯 收藏
Powered by: BlogJava Copyright © 大樹