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

首頁 > 開發 > 綜合 > 正文

PL/SQL程序結構

2024-07-21 02:13:22
字體:
來源:轉載
供稿:網友
什么是pl/sql程序

    前面第4章學習的標準化的sql語言對數據庫進行各種操作,每次只能執行一條語句,語句以英文的分號“;”為結束標識,這樣使用起來很不方便,同時效率較低,這是因為oracle數據庫系統不像vb、vc這樣的程序設計語言,它側重于后臺數據庫的管理,因此提供的編程能力較弱,而結構化編程語言對數據庫的支持能力又較弱,如果一些稍微復雜點的管理任務都要借助編程語言來實現的話,這對管理員來講是很大的負擔。
    正是在這種需求的驅使下,從oracle 6開始,oracle公司在標準sql語言的基礎上發展了自己的pl/sql(procedural language/sql,過程化sql語言)語言,將變量、控制結構、過程和函數等結構化程序設計的要素引入了sql語言中,這樣就能夠編制比較復雜的sql程序了,利用pl/sql語言編寫的程序也稱為pl/sql程序塊。
    pl/sql程序塊的主要特點如下。
    具有模塊化的結構。
    使用過程化語言控制結構。
    能夠進行錯誤處理。
    pl/sql程序塊只能在【sql plus】、【sqlplus worksheet】等工具支持下以解釋型方式執行,不能編譯成可執行文件,脫離支撐環境執行。

pl/sql實例分析

    下面將為前面建立的tempuser用戶建立一個名為testtable的數據表。
    在該表中有recordnumber整數型字段和currentdate時間型字段,編制一個pl/sql程序完成向該表中自動輸入100個記錄,要求recordnumber字段從1到100,currentdate字段為當前系統時間。
    (1)前面建立的tempuser用戶默認的表空間為users,因此,要想使該用戶能夠使用表空間建立數據方案對象,必須首先給其賦予名為“resource”的角色。
    (2)以system用戶、sysdba身份登錄數據庫后,在【企業管理器】中按照修改用戶的步驟進行操作,直到出現如圖9.1所示的編輯用戶的【角色】選項卡。
    在【可用】下拉列表框中選擇“resource”,單擊按鈕將其添加到【已授予】列表框中。【默認值】單元格被選中,單擊“確定”按鈕。

    (3)讀者也可以在【sqlplus worksheet】中直接執行如下sql代碼完成上述操作。
    ―――――――――――――――――――――――――――――――――――――
    grant "resource" to "tempuser";
    alter user "tempuser" default role all
    ―――――――――――――――――――――――――――――――――――――
    【配套程序位置】:第9章/grantrole.sql。
    (4)按照創建數據表的操作步驟進行,直到出現如圖9.2所示的創建表的【一般信息】選項卡。
    在【名稱】文本框中輸入“testable”。
    在【方案】下拉列表框中選擇“tempuser”。
    在【表空間】下拉列表框中選擇“users”。
    選擇【表】/【標準】單選鈕。
    選擇【定義列】單選鈕。
    在【表列定義區】中輸入兩個數據列的定義。
    完成設置后單擊按鈕。

    (5)讀者也可以在【sqlplus worksheet】中直接執行如下sql代碼完成上述操作。
    ―――――――――――――――――――――――――――――――――――――
    create table "tempuser"."testtable" ("recordnumber" number(4) not
        null, "currentdate" date not null)
        tablespace "users"
    ―――――――――――――――――――――――――――――――――――――
    【配套程序位置】:第9章/createtesttable.sql。
    (6)以tempuser用戶身份登錄【sqlplus worksheet】,執行下列sql代碼完成向數據表tempuser.testable中輸入100個記錄的功能。執行結果如圖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。

    (7)在【sqlplus worksheet】中執行下列語句,查詢插入的數據,結果如圖9.4所示。
    ―――――――――――――――――――――――――――――――――――――
    select * from tempuser.testtable;
    ―――――――――――――――――――――――――――――――――――――
    【配套程序位置】:第9章/selecttesttable.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執行部分標識
for i in 1..maxrecords loopi從1循環到maxrecords
insert into tempuser.testtable(recordnumber,currentdate) values (i,sysdate);向數據表中插入數據
end loop;結束循環
dbms_output.put_line('成功錄入數據!');顯示成功錄入數據信息
commit;提交結果
end;結束執行

    表中的sysdate為系統時間函數;dbms_output為系統默認的程序包,put_line為包中定義的方法,功能是輸出信息;在oracle中,所有對數據庫數據的更改并沒有直接操作數據庫,而是放在叫工作區的內存里,只有在commit語句執行后,才發生永久更改。

pl/sql程序結構

    結合上述實例進行分析,完整的pl/sql程序結構可以分為3個部分。
    1. 定義部分
    以declare為標識,在該部分中定義程序中要使用的常量、變量、游標和例外處理名稱,pl/sql程序中使用的所有定義必須在該部分集中定義,而在高級語言里變量可以在程序執行過程中定義。
    2. 執行部分
    以begin為開始標識,以end為結束標識。該部分是每個pl/sql程序所必備的,包含了對數據庫的操作語句和各種流程控制語句。
    3. 異常處理部分
    該部分包含在執行部分里面,以exception為標識,對程序執行中產生的異常情況進行處理。一個完整的pl/sql程序的總體結構如圖9.5所示。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 慈溪市| 平远县| 哈尔滨市| 曲阳县| 望奎县| 天台县| 汉阴县| 平南县| 巩留县| 东丽区| 柳林县| 宝坻区| 广南县| 汉寿县| 拜泉县| 永寿县| 莒南县| 牡丹江市| 新巴尔虎左旗| 梁河县| 塘沽区| 牙克石市| 汉源县| 新龙县| 澜沧| 邯郸市| 汾阳市| 渭南市| 宜章县| 高青县| 武义县| 琼海市| 涡阳县| 西贡区| 泾川县| 陵水| 滦平县| 仁化县| 米脂县| 施秉县| 同德县|