<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    PL/SQL學習筆記(一)

    Posted on 2007-02-11 19:52 dennis 閱讀(1015) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫技術(shù)

    斷斷續(xù)續(xù)學過,這次系統(tǒng)地來讀讀。

    (一)

    PL/SQL是oracle在標準SQL語言上的過程性擴展,它不僅允許嵌入SQL語句,而且允許定義變量和常量,允許過程語言結(jié)構(gòu)(條件語句和循環(huán)語句),允許使用異常處理oracle錯誤等。通過使用PL/SQL,可以在一個PL/SQL塊中包含多條SQL語句和PL/SQL語句。PL/SQL具有以下優(yōu)點:

    1。提高應用系統(tǒng)的運行性能。

    通過使用PL/SQL塊包含多條SQL語句,從而減少了SQL語句的發(fā)送次數(shù),降低了網(wǎng)絡開銷,提高了應用程序性能

    2。提供模塊化的程序設計功能。

    將企業(yè)規(guī)則和商業(yè)邏輯集成到PL/SQL子程序當中,提供給客戶端調(diào)用,簡化了客戶端應用程序的開發(fā)和維護工作,降低了耦合度

    3。允許定義標識符,允許定義變量、常量、游標和異常等標識符

    4。具有過程語言控制結(jié)構(gòu),允許使用條件分支語句和循環(huán)語句

    5。具有良好的兼容性,在允許運行oracle的任何平臺上執(zhí)行,不僅在數(shù)據(jù)庫服務端執(zhí)行,也可以在oracle提供的工具中開發(fā)PL/SQL

    6。處理運行錯誤,使用PL/SQL提供的EXCEPTION,開發(fā)人員可以集中處理各種oracle錯誤和PL/SQL錯誤,簡化了錯誤處理。

    (二)

    PL/SQL塊的概念:

    Block是PL/SQL的基本單元,編寫PL/SQL本質(zhì)上就是編寫PL/SQL塊,塊的嵌套層次沒有限制。

    1。塊的結(jié)構(gòu):塊由3部分組成

    ?

    DECLARE ?

    ??定義部分——定義常量,變量,游標,異常,復雜數(shù)據(jù)類型等

    BEGIN

    ??執(zhí)行部分

    EXCEPTION

    ??異常處理部分

    END ;? /* 塊結(jié)束標志 */

    ?

    其中只有執(zhí)行部分是必須的!

    2。分類:

    1)匿名塊,匿名塊是指沒有名稱的PL/SQL塊,可以內(nèi)嵌到應用程序中,如:

    declare
    ????v_name?
    VARCHAR2 ( 10 );

    BEGIN
    ????
    select ?name? into ?v_name? from ?test? where ?name =& no;
    ????dbms_output.put_line(
    ' 名字: ' || v_name);
    ????EXCEPTION
    ????
    WHEN ?NO_DATA_FOUND? THEN
    ????dbms_output.put_line(
    ' 找不到該名字 ' );
    end ;


    2)命名塊:與匿名塊相似,使用命名塊主要是為了區(qū)分多級嵌套關系,如:

    << out >>

    declare
    ????v_name?
    VARCHAR2 ( 10 );

    BEGIN

    ????
    << inner >>

    ????
    begin

    ???????????
    null ;

    ????
    end ;

    ????
    -- <<inner>>

    ????
    ????
    select ?name? into ?v_name? from ?test? where ?name =& no;
    ????dbms_output.put_line(
    ' 名字: ' || v_name);
    ????EXCEPTION
    ????
    WHEN ?NO_DATA_FOUND? THEN
    ????dbms_output.put_line(
    ' 找不到該名字 ' );
    end ;? -- <<outer>>


    3)子程序,又可以分成3種:過程、函數(shù)和包

    A。過程用于執(zhí)行特定操作,當建立過程時既可以指定輸入?yún)?shù),也可以指定輸出參數(shù),從而在應用環(huán)境和程序間傳遞數(shù)據(jù),使用CREATE PROCEDURE語句,如:

    ? create ? or ? replace ? PROCEDURE ?update_test(id2? NUMBER ,money2? LONG )
    ?
    is
    ????e_no_row?EXCEPTION;
    ?
    begin
    ????
    update ?test? set ? money = money2? where ?id = id2;
    ????
    if ?SQL % NOTFOUND? THEN
    ??????RAISE?e_no_row;
    ????
    end ? if ;
    ?EXCEPTION
    ????
    WHEN ??e_no_row? THEN
    ??????raise_application_error(
    - 20004 , ' 該test不存在 ' );
    ?
    end ?update_test;


    B)函數(shù),與過程主要不同是函數(shù)需要返回數(shù)據(jù),在函數(shù)頭和函數(shù)體都必須有RETURN語句,如:

    ?

    create ? or ? replace ? FUNCTION ?get_long(name2? VARCHAR2 )
    RETURN ? LONG ? IS
    ??avg_money?
    NUMBER ;
    begin
    ??
    select ? money ? into ?avg_money? from ?test? where ?name = name2;
    ??
    RETURN ?avg_money;
    end ;??

    ?

    C)包,類似JAVA包的概念,包含兩部分,包規(guī)范和包體,包規(guī)范相當于C++中的頭文件聲明子程序,而包體包含這些子程序的具體實現(xiàn)。調(diào)用包中的子程序時,需要 ‘包名.子程序名’ 這樣的形式調(diào)用

    4。觸發(fā)器是指隱含執(zhí)行的存儲過程,定義觸發(fā)器需要指定觸發(fā)事件和觸發(fā)操作,常見觸發(fā)事件如insert,update,delete等,使用CREATE?TRIGGER命令建立

    主站蜘蛛池模板: 足恋玩丝袜脚视频免费网站| 一级黄色免费大片| 日本最新免费网站| 久久亚洲AV无码精品色午夜麻| 色费女人18女人毛片免费视频| 国产高清在线免费| 成在线人直播免费视频| 日韩一区二区免费视频| 在线观看亚洲电影| 亚洲 综合 国产 欧洲 丝袜 | 色拍自拍亚洲综合图区| 99精品免费观看| 亚洲人成电影亚洲人成9999网| 色欲A∨无码蜜臀AV免费播 | 国产成人精品亚洲精品| 一本一道dvd在线观看免费视频 | 亚洲高清资源在线观看| 免费福利视频导航| 亚洲精品无码中文久久字幕| 免费亚洲视频在线观看| 99久久成人国产精品免费| 成年18网站免费视频网站| 激情综合亚洲色婷婷五月APP| 久久不见久久见中文字幕免费| 亚洲熟妇无码AV| 免费在线观看毛片| a级片在线免费看| 亚洲视频在线免费看| 毛片a级毛片免费观看品善网| 美女被免费网站视频在线| 亚洲人成亚洲人成在线观看 | 四虎成人免费影院网址| 无忧传媒视频免费观看入口| 亚洲国产成人片在线观看| 97碰公开在线观看免费视频| 羞羞漫画小舞被黄漫免费| 亚洲国产精品va在线播放| 欧洲黑大粗无码免费| a免费毛片在线播放| 亚洲毛片免费观看| 亚洲国产精品成人|