日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

[轉貼]Oracle PL/SQL語言基礎

瀏覽:14日期:2023-11-14 19:18:00
[轉貼]Oracle PL/SQL語言基礎Oracle PL/SQL語言基礎 PL/SQL是ORACLE對標準數據庫語言的擴展,ORACLE公司已經將PL/SQL整合到ORACLE 服務器和其他工具中了,近幾年中更多的開發人員和DBA開始使用PL/SQL,本文將講述PL/SQL基礎語法,結構和組件、以及如何設計并執行一個PL/SQL程序。 PL/SQL的優點 從版本6開始PL/SQL就被可靠的整合到ORACLE中了,一旦把握PL/SQL的優點以及其獨有的數據治理的便利性,那么你很難想象ORACLE缺了PL/SQL的情形。PL/SQL 不是一個獨立的產品,他是一個整合到ORACLE服務器和ORACLE工具中的技術,可以把PL/SQL看作ORACLE服務器內的一個引擎,sql語句執行者處理單個的sql語句,PL/SQL引擎處理PL/SQL程序塊。當PL/SQL程序塊在PL/SQL引擎處理時,ORACLE服務器中的SQL語句執行器處理pl/sql程序塊中的SQL語句。 PL/SQL的優點如下: . PL/SQL是一種高性能的基于事務處理的語言,能運行在任何ORACLE環境中,支持所有數據處理命令。通過使用PL/SQL程序單元處理SQL的數據定義和數據控制元素。 . PL/SQL支持所有SQL數據類型和所有SQL函數,同時支持所有ORACLE對象類型 . PL/SQL塊可以被命名和存儲在ORACLE服務器中,同時也能被其他的PL/SQL程序或SQL命令調用,任何客戶/服務器工具都能訪問PL/SQL程序,具有很好的可重用性。 . 可以使用ORACLE數據工具治理存儲在服務器中的PL/SQL程序的安全性。可以授權或撤銷數據庫其他用戶訪問PL/SQL程序的能力。 . PL/SQL代碼可以使用任何ASCII文本編輯器編寫,所以對任何ORACLE能夠運行的操作系統都是非常便利的 . 對于SQL,ORACLE必須在同一時間處理每一條SQL語句,在網絡環境下這就意味作每一個獨立的調用都必須被oracle服務器處理,這就占用大量的服務器時間,同時導致網絡擁擠。而PL/SQL是以整個語句塊發給服務器,這就降低了網絡擁擠。 PL/SQL塊結構 PL/SQL是一種塊結構的語言,組成PL/SQL程序的單元是邏輯塊,一個PL/SQL 程序包含了一個或多個邏輯塊,每個塊都可以劃分為三個部分。與其他語言相同,變量在使用之前必須聲明,PL/SQL提供了獨立的專門用于處理異常的部分,下面描述了PL/SQL塊的不同部分: 聲明部分(Declaration section) 聲明部分包含了變量和常量的數據類型和初始值。這個部分是由要害字DECLARE開始,假如不需要聲明變量或常量,那么可以忽略這一部分;需要說明的是游標的聲明也在這一部分。 執行部分(Executable section) 執行部分是PL/SQL塊中的指令部分,由要害字BEGIN開始,所有的可執行語句都放在這一部分,其他的PL/SQL塊也可以放在這一部分。 異常處理部分(Exception section) 這一部分是可選的,在這一部分中處理異常或錯誤,對異常處理的具體討論我們在后面進行。 PL/SQL塊語法 [DECLARE] ---declaration statements BEGIN ---executable statements [EXCEPTION] ---exception statements END ;PL/SQL塊中的每一條語句都必須以分號結束,SQL語句可以使多行的,但分號表示該語句的結束。一行中可以有多條SQL語句,他們之間以分號分隔。每一個PL/SQL塊由BEGIN或DECLARE開始,以END結束。注釋由--標示。 PL/SQL塊的命名和匿名 PL/SQL程序塊可以是一個命名的程序塊也可以是一個匿名程序塊。匿名程序塊可以用在服務器端也可以用在客戶端。 命名程序塊可以出現在其他PL/SQL程序塊的聲明部分,這方面比較明顯的是子程序,子程序可以在執行部分引用,也可以在異常處理部分引用。 PL/SQL程序塊可背獨立編譯并存儲在數據庫中,任何與數據庫相連接的應用程序都可以訪問這些存儲的PL/SQL程序塊。ORACLE提供了四種類型的可存儲的程序:  . 函數  . 過程  . 包  . 觸發器 函數 函數是命名了的、存儲在數據庫中的PL/SQL程序塊。函數接受零個或多個輸入參數,有一個返回值,返回值的數據類型在創建函數時定義。定義函數的語法如下: FUNCTION name [{parameter[,parameter,...])] RETURN datatypes IS [local declarations] BEGIN execute statements [EXCEPTION exception handlers] END [name] ;過程 存儲過程是一個PL/SQL程序塊,接受零個或多個參數作為輸入(INPUT)或輸出(OUTPUT)、或既作輸入又作輸出(INOUT),與函數不同,存儲過程沒有返回值,存儲過程不能由SQL語句直接使用,只能通過EXECUT命令或PL/SQL程序塊內部調用,定義存儲過程的語法如下: PROCEDURE name [(parameter[,parameter,...])] IS [local declarations] BEGIN execute statements [EXCEPTION exception handlers ] END [name] ;包(package) 包其實就是被組合在一起的相關對象的集合,當包中任何函數或存儲過程被調用,包就被加載入內存中,包中的任何函數或存儲過程的子程序訪問速度將大大加快。 包由兩個部分組成:規范和包主體(body),規范描述變量、常量、游標、和子程序,包體完全定義子程序和游標。 觸發器(trigger) 觸發器與一個表或數據庫事件聯系在一起的,當一個觸發器事件發生時,定義在表上的觸發器被觸發。 變量和常量 變量存放在內存中以獲得值,能被PL/SQL塊引用。你可以把變量想象成一個可儲藏東西的容器,容器內的東西是可以改變的。 聲明變量 變量一般都在PL/SQL塊的聲明部分聲明,PL/SQL是一種強壯的類型語言,這就是說在引用變量前必須首先聲明,要在執行或異常處理部分使用變量,那么變量必須首先在聲明部分進行聲明。 聲明變量的語法如下: Variable_name [CONSTANT] databyte [NOT NULL][:=DEFAULT eXPression] ;注重:可以在聲明變量的同時給變量強制性的加上NOT NULL約束條件,此時變量在初始化時必須賦值。 給變量賦值 給變量賦值有兩種方式: . 直接給變量賦值  X:=200;  Y=Y+(X*20); . 通過SQL SELECT INTO 或FETCH INTO給變量賦值 SELECT SUM(SALARY),SUM(SALARY*0.1) INTO TOTAL_SALARY,TATAL_COMMISSION FROM EMPLOYEE WHERE DEPT=10; 常量 常量與變量相似,但常量的值在程序內部不能改變,常量的值在定義時賦予,,他的聲明方式與變量相似,但必須包括要害字CONSTANT。常量和變量都可被定義為SQL和用戶定義的數據類型。 ZERO_VALUE CONSTANT NUMBER:=0; ;這個語句定了一個名叫ZERO_VALUE、數據類型是NUMBER、值為0的常量。 標量(scalar)數據類型 標量(scalar)數據類型沒有內部組件,他們大致可分為以下四類:  . number  . character  . date/time  . boolean 表1顯示了數字數據類型;表2顯示了字符數據類型;表3顯示了日期和布爾數據類型。 表1 Scalar Types:Numeric Datatype Range SuBTypes description ;BINARY_INTEGER -214748-2147483647 NATURAL NATURAL NPOSITIVE POSITIVEN SIGNTYPE;;用于存儲單字節整數。 要求存儲長度低于NUMBER值。 用于限制范圍的子類型(SUBTYPE):  NATURAL:用于非負數  POSITIVE:只用于正數  NATURALN:只用于非負數和非NULL值  POSITIVEN:只用于正數,不能用于NULL值  SIGNTYPE:只有值:-1、0或1. ;NUMBER 1.0E-130-9.99E125 DEC DECIMAL DOUBLE;;PRECISION FLOAT;;INTEGERIC INT NUMERIC REAL SMALLINT 存儲數字值,包括整數和浮點數。可以選擇精度和刻度方式,語法: number[([,])]。 缺省的精度是38,scale是0. ;PLS_INTEGER -2147483647-2147483647 ; 與BINARY_INTEGER基本相同,但采用機器運算時,PLS_INTEGER提供更好的性能 。 ;表2 字符數據類型;;datatype rang subtype description ;CHAR 最大長度32767字節;;CHARACTER 存儲定長字符串,假如長度沒有確定,缺省是1 ;LONG 最大長度2147483647字節 ; 存儲可變長度字符串 ;RAW;;最大長度32767字節 ; 用于存儲二進制數據和字節字符串,當在兩個數據庫之間進行傳遞時,RAW數據不在字符集之間進行轉換。 ;LONGRAW 最大長度2147483647 ; 與LONG數據類型相似,同樣他也不能在字符集之間進行轉換。 ;ROWID 18個字節 ; 與數據庫ROWID偽列類型相同,能夠存儲一個行標示符,可以將行標示符看作數據庫中每一行的唯一鍵值。 ;VARCHAR2 最大長度32767字節 STRINGVARCHAR 與VARCHAR數據類型相似,存儲可變長度的字符串。聲明方法與VARCHAR相同;; ;表3 DATE和BOOLEAN datatype range;;description ;BOOLEAN TRUE/FALSE 存儲邏輯值TRUE或FALSE,無參數 ;DATE 01/01/4712 BC;;存儲固定長的日期和時間值,日期值中包含時間 ;LOB數據類型 LOB(大對象,Large object) 數據類型用于存儲類似圖像,聲音這樣的大型數據對象,LOB數據對象可以是二進制數據也可以是字符數據,其最大長度不超過4G。LOB數據類型支持任意訪問方式,LONG只支持順序訪問方式。LOB存儲在一個單獨的位置上,同時一個'LOB定位符'(LOB locator)存儲在原始的表中,該定位符是一個指向實際數據的指針。在PL/SQL中操作LOB數據對象使用ORACLE提供的包DBMS_LOB.LOB數據類型可分為以下四類: . BFILE . BLOB . CLOB . NCLOB 操作符 與其他程序設計語言相同,PL/SQL有一系列操作符。操作符分為下面幾類: . 算術操作符 . 關系操作符 . 比較操作符 . 邏輯操作符 算術操作符如表4所示 operator operation ;+;;加 -;;減 /;;除 ;*;;乘;;** 乘方 ;關系操作符主要用于條件判定語句或用于where子串中,關系操作符檢查條件和結果是否為true或false,表5是PL/SQL中的關系操作符 operator operation ;<;;小于操作符 ;<=;;小于或等于操作符 ;>;;大于操作符 ;>= 大于或等于操作符 ;=;;等于操作符;; ;!=;;不等于操作符 ;<>;;不等于操作符 ;:=;;賦值操作符 ;表6 顯示的是比較操作符 operator;;operation ;IS NULL 假如操作數為NULL返回TRUE ;LIKE 比較字符串值 ;BETWEEN 驗證值是否在范圍之內 ;IN 驗證操作數在設定的一系列值中 ;表7.8顯示的是邏輯操作符 operator operation ;AND;;兩個條件都必須滿足 ;OR 只要滿足兩個條件中的一個 ;NOT 取反 ;執行部分 執行部分包含了所有的語句和表達式,執行部分以要害字BEGIN開始,以要害字EXCEPTION結束,假如EXCEPTION不存在,那么將以要害字END結束。 分號分隔每一條語句,使用賦值操作符:=或SELECT INTO或FETCH INTO給每個變量賦值,執行部分的錯誤將在異常處理部分解決,在執行部分中可以使用另一個PL/SQL程序塊,這種程序塊被稱為嵌套塊 所有的SQL數據操作語句都可以用于執行部分,PL/SQL塊不能再屏幕上顯示SELECT語句的輸出。SELECT語句必須包括一個INTO子串或者是游標的一部分,執行部分使用的變量和常量必須首先在聲明部分聲明,執行部分必須至少包括一條可執行語句,NULL是一條合法的可執行語句,事物控制語句COMMIT和ROLLBACK可以在執行部分使用,數據定義語言(Data Definition language)不能在執行部分中使用,DDL語句與EXECUTE IMMEDIATE一起使用或者是DBMS_SQL調用。 執行一個PL/SQL塊 SQL*PLUS中匿名的PL/SQL塊的執行是在PL/SQL塊后輸入/來執行,如下面的例子所示: declare;; v_comm_percent constant number:=10; begin  update emp  set comm=sal*v_comm_percent  where deptno=10;  end SQL> / PL/SQL procedure sUCcessfully completed. SQL> ;命名的程序與匿名程序的執行不同,執行命名的程序塊必須使用execute要害字: create or replace procedure update_commission  (v_dept in number,v_pervent in number default 10) is;;begin  update emp  set comm=sal*v_percent  where deptno=v_dept; end SQL>/ Procedure created SQL>execute update_commission(10,15); PL/SQL procedure successfully completed. SQL>;; ;假如在另一個命名程序塊或匿名程序塊中執行這個程序,那么就不需要EXECUTE關進字。 declare  v_dept number; begin  select a.deptno  into v_dept  from emp a  where job='PRESIDENT'  update_commission(v_dept); end SQL>/  PL/SQL procedure successfully completed SQL> ; 控制結構 控制結構控制PL/SQL程序流程的代碼行,PL/SQL支持條件控制和循環控制結構。 語法和用途  IF..THEN 語法: IF condition THEN  Statements 1;  Statements 2;  .... END IF;; ;IF語句判定條件condition是否為TRUE,假如是,則執行THEN后面的語句,假如condition為false或NULL則跳過THEN到END IF之間的語句,執行END IF后面的語句。 IF..THEN...ELSE 語法: IF condition THEN  Statements 1;  Statements 2;  .... ELSE  Statements 1;  Statements 2;  .... END IF;; ;假如條件condition為TRUE,則執行THEN到ELSE之間的語句,否則執行ELSE到END IF之間的語句。 IF 可以嵌套,可以在IF 或IF ..ELSE語句中使用IF或IF..ELSE語句。 if (a>b) and (a>c) then g:=a; else g:=b; if c>g then  g:=c; end if end if ;IF..THEN..ELSIF 語法: IF condition1 THEN  statement1; ELSIF condition2 THEN  statement2; ELSIF condition3 THEN  statement3; ELSE  statement4; END IF;  statement5; ;假如條件condition1為TRUE則執行statement1,然后執行statement5,否則判定condition2是否為TRUE,若為TRUE則執行statement2,然后執行statement5,對于condition3也是相同的,假如condition1,condition2,condition3都不成立,那么將執行statement4,然后執行statement5。 循環控制 循環控制的基本形式是LOOP語句,LOOP和END LOOP之間的語句將無限次的執行。LOOP語句的語法如下: LOOP;; statements; END LOOP LOOP和END LOOP之間的語句無限次的執行顯然是不行的,那么在使用LOOP語句時必須使用EXIT語句,強制循環結束,例如: X:=100; LOOP  X:=X+10;  IF X>1000 THEN EXIT;  END IF END LOOP; Y:=X; ;此時Y的值是1010. EXIT WHEN語句將結束循環,假如條件為TRUE,則結束循環。 X:=100; LOOP X:=X+10; EXIT WHEN X>1000; X:=X+10; END LOOP; Y:=X; ;WHILE..LOOP WHILE..LOOP有一個條件與循環相聯系,假如條件為TRUE,則執行循環體內的語句,假如結果為FALSE,則結束循環。 X:=100; WHILE X<=1000 LOOP  X:=X+10; END LOOP; Y=X;;; ;FOR...LOOP 語法: FOR counter IN [REVERSE] start_range....end_range LOOP statements; END LOOP; ;LOOP和WHILE循環的循環次數都是不確定的,FOR循環的循環次數是固定的,counter是一個隱式聲明的變量,他的初始值是start_range,第二個值是start_range+1,直到end_range,假如start_range等于end _range,那么循環將執行一次。假如使用了REVERSE要害字,那么范圍將是一個降序。 X:=100; FOR v_counter in 1..10 loop x:=x+10; end loop y:=x; ;假如要退出for循環可以使用EXIT語句。 標簽 用戶可以使用標簽使程序獲得更好的可讀性。程序塊或循環都可以被標記。標簽的形式是<>。 標記程序塊 <> [DECLARE] ... ... ... BEGIN ........ [EXCEPTION] ....... END label_name ;標記循環 <> LOOP ......... <> loop .......... <> loop .... EXIT outer_loop WHEN v_condition=0; end loop innermost_loop; .......... END LOOP inner_loop; END LOOP outer_loop;;; ;GOTO語句 語法: GOTO LABEL; 執行GOTO語句時,控制會立即轉到由標簽標記的語句。PL/SQL中對GOTO語句有一些限制,對于塊、循環、IF語句而言,從外層跳轉到內層是非法的。 X :=100; FOR V_COUNTER IN 1..10 LOOP  IF V_COUNTER =4 THEN GOTO end_of_loop  END IF  X:=X+10;  <>  NULL END LOOP Y:=X;;; ;注重:NULL是一個合法的可執行語句。 嵌套 程序塊的內部可以有另一個程序塊這種情況稱為嵌套。嵌套要注重的是變量,定義在最外部程序塊中的變量可以在所有子塊中使用,假如在子塊中定義了與外部程序塊變量相同的變量名,在執行子塊時將使用子塊中定義的變量。子塊中定義的變量不能被父塊引用。同樣GOTO語句不能由父塊跳轉道子塊中,反之則是合法的。 《OUTER BLOCK》 DECLARE  A_NUMBER INTEGER;  B_NUMBER INTEGER; BEGIN  --A_NUMBER and B_NUMBER are available here  <>  DECLARE  C_NUMBER INTEGER  B_NUMBER NUMBER(20) BEGIN  C_NUMBER:=A_NUMBER;  C_NUMBER=OUTER_BLOCK.B_NUMBER; END SUB_BLOCK; END OUT_BLOCK; ;小結   我們在這篇文章中介紹了PL/SQL的基礎語法以及如何使用PL/SQL語言設計和運行PL/SQL程序塊,并將PL/SQL程序整合到Oracle服務器中,雖然PL/SQL程序作為功能塊嵌入Oracle數據庫中,但PL/SQL與ORACLE數據庫的緊密結合使得越來越多的Oracle數據庫治理員和開發人員開始使用PL/SQL
標簽: Oracle 數據庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲啊v在线| 国产精品xvideos88| 91亚洲国产高清| 国产一区二区三区四区| 正在播放日韩精品| 中文字幕色婷婷在线视频| 日韩大片免费观看| 不卡一区综合视频| 日本中文字幕视频一区| 国产精品xxx| 欧美成人精品一级| 日韩不卡一区| 五月天久久久| 日韩精品免费视频人成| 久久国产三级精品| 国产成人精品三级高清久久91| 日韩免费一区| 日韩制服丝袜先锋影音| 国产探花在线精品| 国产成人精品一区二区三区视频| 999精品一区| 香蕉久久夜色精品国产| 欧美日韩精品一区二区三区视频 | 亚洲精品乱码久久久久久蜜桃麻豆| 日韩三级精品| 高清日韩欧美| 亚洲欧美不卡| 久久av偷拍| 亚洲免费成人| 麻豆精品视频在线观看| 狠狠干综合网| 久久av网站| 亚洲中字黄色| 国产欧美午夜| 亚州av乱码久久精品蜜桃| 国产日产一区| 亚洲美洲欧洲综合国产一区| 国产精品日韩精品在线播放| 国产精品亚洲一区二区三区在线观看| 免费人成精品欧美精品| 精品亚洲成人| 亚洲欧美日本国产专区一区| 嫩草伊人久久精品少妇av杨幂 | 国产成人a视频高清在线观看| 99在线精品免费视频九九视| 国产精品久久久久毛片大屁完整版| 国产一在线精品一区在线观看| 亚洲精品免费观看| 少妇精品导航| 国产精品网址| 视频一区国产视频| 日韩欧美国产精品综合嫩v| 日韩黄色在线观看| 欧美日韩国产免费观看| 麻豆久久久久久| 亚洲影视一区| 激情久久中文字幕| 激情国产在线| 国产精品色在线网站| 亚洲另类黄色| 91精品观看| 日韩国产激情| 日韩高清中文字幕一区| 在线亚洲观看| 日韩精品久久久久久久电影99爱| 久久精品伊人| 欧美精品中文字幕亚洲专区| 欧美专区一区二区三区| 欧美亚洲在线日韩| 国产日韩电影| 精品九九久久| 国产精品视频首页| 日精品一区二区三区| 亚洲美洲欧洲综合国产一区 | 国产日韩欧美| 黄色日韩在线| 性感美女一区二区在线观看| 久久精品国产99国产| 亚洲精品第一| 亚洲色图网站| 日韩中文字幕一区二区三区| 欧美午夜不卡| 激情久久久久久久| 999久久久免费精品国产| 国产精品蜜芽在线观看| 欧美国产不卡| 国产精品成人国产| 国产精品成人3p一区二区三区| 日韩不卡手机在线v区| 日韩精品视频一区二区三区| 欧美在线资源| 红桃视频欧美| av成人国产| 亚洲免费成人| 性色一区二区| 中文字幕av亚洲精品一部二部| 欧美日韩精品一本二本三本| 欧美日韩国产一区二区三区不卡 | 国产精品调教| 久久只有精品| 91亚洲国产成人久久精品| 风间由美中文字幕在线看视频国产欧美| 日韩精品久久理论片| 日韩精品一区二区三区中文| 欧美午夜三级| 国内自拍视频一区二区三区| 国产一区二区三区精品在线观看| 国产一区二区三区四区| 欧洲一区二区三区精品| 91精品亚洲| 国产精品日韩欧美一区| 亚洲一区二区三区久久久| 亚洲免费毛片| 国产日韩欧美在线播放不卡| 麻豆精品视频在线观看免费| 欧美日韩国产观看视频| 欧美中文一区二区| 欧美日韩国产在线观看网站| 在线视频精品| 日本免费在线视频不卡一不卡二| 国产精品亚洲欧美日韩一区在线 | 国产另类在线| 亚洲综合电影| 黑丝一区二区三区| 日韩一区二区三区精品| 久久这里只有| 欧美精品一二| 国产亚洲人成a在线v网站| 国产一区二区三区天码| 国产成人黄色| 亚洲福利国产| 亚洲精品少妇| 精品国产欧美| 99国产精品久久久久久久成人热| 香蕉久久一区| 精品国产乱码久久久| 欧美日韩国产在线观看网站| 日韩福利视频一区| av免费不卡国产观看| 亚洲一区二区三区四区电影| 老色鬼精品视频在线观看播放| 久久青草久久| 国产精品亚洲二区| 九一精品国产| 欧美亚洲国产日韩| 日韩欧美看国产| 日本一不卡视频| 欧美少妇精品| 日韩国产在线一| 99久久精品网| 91成人在线网站| 亚洲高清毛片| 另类欧美日韩国产在线| 亚洲专区欧美专区| 三上亚洲一区二区| 日韩一区二区三免费高清在线观看| 日韩理论片av| 国产欧美欧美| 天堂va蜜桃一区二区三区| 成人午夜网址| 老牛国产精品一区的观看方式| 91一区二区| 青草综合视频| 欧美日韩国产传媒| 国产精品99视频| 日韩1区2区日韩1区2区| 久久一区二区三区喷水| 国产一区三区在线播放| 中文字幕一区二区三区日韩精品 | 日本亚洲欧美天堂免费| av一区在线| 国产精品视频一区二区三区四蜜臂| 99在线精品免费视频九九视| 中文字幕高清在线播放| 国产精品久久亚洲不卡| 亚洲一级大片| 人人精品亚洲| 精品一二三区| 国产精品成人**免费视频 | 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 成人在线免费观看网站| 日韩欧美激情电影| 亚洲免费影视| 蜜臀91精品国产高清在线观看| 精品丝袜久久| 国产高清日韩| 国产精品久久久久久久久久白浆| 亚洲网址在线观看| 羞羞答答国产精品www一本 | 欧美亚洲tv| 亚洲一区欧美| 久久亚洲风情| 亚洲色诱最新| 午夜精品一区二区三区国产| 成人va天堂| 成人日韩在线观看| 樱桃视频成人在线观看| 国产一区二区三区成人欧美日韩在线观看| 日本国产亚洲| 日韩av一区二区三区四区|