語言基礎--=====================PL/SQL是過程化的SQL語言,是ORACLE對SQL語言的擴展,在普通SQL語句的基礎上增加了編程語言的特點。使得該語言不僅具有過程編程語言的特征,如循環、條件分支等。同時也具有對象編程語言的特征,如重載、繼承等。一、PL/SQL程序語言的組成主要由塊組成一個塊由三個基本部分組成:聲明、執行體、異常處理PL/SQL塊有匿名塊和命名塊" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

PL/SQL --> 語言基礎

系統 1955 0

--=====================

-- PL/SQL --> 語言基礎

--=====================

?

??? PL / SQL 是過程化的 SQL 語言,是 ORACLE SQL 語言的擴展,在普通 SQL 語句的基礎上增加了編程語言的特點。使得該語言不僅具有過程編程語

言的特征,如循環、條件分支等。同時也具有對象編程語言的特征,如重載、繼承等。

???

一、 PL / SQL 程序語言的組成

??? 主要由塊組成

??????? 一個塊由三個基本部分組成:聲明、執行體、異常處理

??? ??? PL / SQL 塊有匿名塊和命名塊

??????? 命名塊會將代碼保存到服務器

???????

??? 典型的塊結構如下

??????? [ DECLARE ??????????????????? -- 聲明部分

??????????? declaration_statements

??????? ]

??????? BEGIN

??????????? executable_statements ?? -- 執行體部分

??????? [EXCEPTION

??????????? exception_handling_statements ??? -- 異常處理部分

??????? ]

??????? END ;

??????? /

???

??? PL / SQL 的語言優點

??????? 支持 SQL

??????? 高生成率,性能好

??????? 可移植性

??????? Oracle 集成

???????

二、 PL / SQL 的語法要素

??? PL / SQL 語法要素包括字符集、標識符、文本、分隔符、注釋等。

?

??? 字符集:

??? ? ?? 包括英文大小寫

??????? 0 -數字

??????? 空白符、制表符、空格

??????? 一些特殊符號,如~、!、 @ 、#等

??????? PL / SQL 字符集不區分大小寫

???

??? 標識符:

??????? 變量、常量、子程序的名稱

??????? 以字母開頭、最大長度個字符

??????? 包含空格等特殊符號時,要用英文雙引號括起來

?

??? 文字

??????? 數值型

??????????? 可用常規表示,也可以用科學計數法和冪的形式

??????? 字符型

??????????? 字符型用單引號括起

??????? 日期型

??????? 布爾型

??????????? TRUE FALSE NULL

???????????

??? PL / SQL 的數據類型

??????? NUMBER ???? 數字型能存放整數值和實數值,并且可以定義精度和取值范圍

??????????? DEC ??? 數字型 NUMBER 的子類型,小數

??????????? DOUBLE PRECISION ???? 數字型 NUMBER 的子類型,高精度實數

??????????? INTEGER ??? ? 數字型 NUMBER 的子類型,整數

??????????? INT ???????? 數字型 NUMBER 的子類型,整數

??????????? NUMERIC ??? ? 數字型 NUMBER 的子類型,與 NUMBER 等價

??????????? REAL ?????? ? 數字型 NUMBER 的子類型,與 NUMBER 等價

??? ? ? SMALLINT ??? 數字型 NUMBER 的子類型,取值范圍比 INTEGER

??? BINARY_INTEGER ? 數字型可存儲帶符號整數,為整數計算優化性能

??? VARCHAR2 ??????? 字符型存放可變長字符串,有最大長度

??? CHAR ??? ? ??? 字符型定長字符串

??? LONG ??????? 字符型變長字符串,最大長度可達 ,767

??? DATE ??????? 日期型以數據庫相同的格式存放日期值

??? BOOLEAN ??? ? 布爾型 TRUE OR FALSE

??? ROWID ROWID 存放數據庫的行號

??????? LOB 類型,又分為 BFILE , BLOB , CLOB , NCLOB

???????

??? 操作符

??????? 算術運算符

??????????? +、-、 * 、/、 **

?

??????? 比較運算符

??????????? =、 <> ~= != ^= < <= > >=

?

??????? 其它分隔符

??????????? () := ( 賦值 ) 、, ( 表表項的分隔)、 | | (字符串連接)

??????????? << (標號開始) >> ( 標號的結束 )

??????????? -- ? 單行注釋

??????????? /* ??? */ ??? 多行注釋

??? ??????? % ?? 屬性指示器,一般與 TYPE ROWTYPE 等一起用

???????

三、定義變量

??? 變量的類型可以分為

??????? 標量類型

??????? 復合類型

??????? 參照類型

??????? LOB 類型

???

??? 1. 標量類型 ( 常用 )

??????? varchar2(n),char(n),number(p,s),date,timestamp,long(long raw),boolean,binary_integer,binary_float,binary_double

??????? 定義方法 ( 定義時必須使用標量類型 )

??????????? identifier [constant] datatype [not null] [:= | default expr]

??????? v_ename ???? varchar2 ( 20 );

??????? v_sal ?????? number ( 6 , 2 );

??????? c_tax_rate ? constant number ( 3 , 2 ):= 3.35 ;

??????? v_hiredate ? date ;

??????? v_valid ???? boolean not null default false;

???????

??????? v_ename emp.ename%type; ??? -- 使用表列來定義數據類型

??????? v_sal ? ? emp . sal%type ;

???????

??? 2. 復合類型 ( 存放多個值的變量 )

??????? plsql 中包含 pl / sql 記錄, pl / sql 表,嵌套表, varray 四種復合類型

??????? -- 定義 PL/SQL 記錄

??????????? declare

??????????????? type emp_record_type is record (

??????????????????? name ?????? emp . ename % type ,

??????????????????? salary ???? emp . sal % type ,

??????????????????? title ????? emp . job % type );

??????????????? emp_record emp_record_type ;

??????????? begin

??????????????? select ename , sal , job into emp_record

??????????????? from scott . emp where empno = 7788 ;

??????????????? dbms_output . put_line ( 'Employee Name: ' || emp_record . name );

??????????? end ;

??????????? /

???????????

??????? -- 定義 PL/SQL

??????????? declare

??????????????? type ename_table_type is table of emp . ename % type

??????????????? index by binary_integer ;

??????????????? ename_table ename_table_type ;

??????????? begin

??????????????? select ename into ename_table (- 1 ) from scott . emp

??????????????? where empno = 7788 ;

??????????????? dbms_output . put_line ( 'Employee Name : ' || ename_table (- 1 ));

??????????? end ;

??????????? /

??????????? PL / SQL 表類似于高級語言中的數組 , PL / SQL 表的下表可以為負值 , 元素的個數沒有限制 . 注意必須首先定義 PL / SQL 表類型及表變量

??????????? 在本例中 , ename_table_type 為表類型 , 表類型中元素的數據類型為 emp . ename % type

??????????????? ename_table 為表變量 , ename_table (- 1 ) 表示下標為 - 1 的元素

???????

??????? -- 嵌套表, varray 例子略

???????

??? 3. 參照類型變量

??????? 用于存放數值指針的變量。通常包括游標變量 ( REF CURSOR ) 和對象類型變量 ( REF obj_type )

??? 4.LOB 變量

??????? 存儲大批量數據的變量,通常分為內部 LOB 以及外部 LOB

??? 5. 使用 SQL * Plus 變量

??????? 必須首先使用 variable 命令定義變量,如在 SQL * Plus 中輸出變量,則使用 print variable_name

??????????? scott@ORCL > var name varchar2 ( 20 );

??????????? scott@ORCL > begin

??????????? ? 2 ? select ename into : name from emp where empno = 7788 ;

??????????? ? 3 ? end ;

??????????? ? 4 ? /

?

??????????? PL / SQL procedure successfully completed .

?

??????????? scott@ORCL > print name ;

?

??????????? NAME

??????????? --------------------------------

??????????? SCOTT ??????

?

三、 PL / SQL 中常用的變量賦值方式

??? 1. 在定義時賦值

??????? v_empno ???? number := 7788

??????? c_tax_rate ? constant number ( 3 , 2 ):= 3.35 ;

???

??? 2. 使用 select ... into 來賦值

??????? SELECT expression INTO var_list FROM table_name WHERE condition

???????

??????? -- 例:將號部門的名稱和工作地點顯示出來

?

??????????? DECLARE

??????????????? v_name dept . dname % TYPE ;

??????????????? v_loc ?? dept . loc % TYPE ;

??????????? BEGIN

??????????????? select dname , loc INTO v_name , v_loc FROM dept WHERE deptno = 10 ;

??????????????? DBMS_OUTPUT . PUT_LINE ( '10 DEPT NAME: ' || v_name );

??????????????? DBMS_OUTPUT . PUT_LINE ( '10 DEPT loc: ' || v_loc );

??????????? EXCEPTION

??????????????? WHEN NO_DATA_FOUND THEN

??????????????????? DBMS_OUTPUT . PUT_LINE ( 'NOT FOUND RECORD' );

??????????? END ;

??????????? /

?

??????? -- 例:輸入員工編號,查詢員工姓名,職位,工資

???????

??????????? scott@ORCL > DECLARE

??????????? ? 2 ????????? v_name ? emp . ename % TYPE ;

??????????? ? 3 ????????? v_job ?? emp . job % TYPE ;

??????????? ? 4 ????????? v_sal ? emp . sal % TYPE ;

??????????? ? 5 ????????? v_id ??? emp . empno % TYPE ;

??????????? ? 6 ??????? BEGIN

??????????? ? 7 ????????? v_id :=& inputid ;

??????????? ? 8 ????????? SELECT ename , job , sal INTO v_name , v_job , v_sal FROM emp WHERE empno = v_id ;

??????????? ? ? 9 ????????? DBMS_OUTPUT . PUT_LINE ( '7788 NAME:' || v_name );

??????????? ? 10 ????????? DBMS_OUTPUT . PUT_LINE ( '7788 job:' || v_job );

??????????? ? 11 ????????? DBMS_OUTPUT . PUT_LINE ( '7788 sal:' || v_sal );

??????????? ? 12 ??????? EXCEPTION

??????????? ? 13 ????????? WHEN NO_DATA_FOUND THEN

??????????? ? 14 ??????????? DBMS_OUTPUT . PUT_LINE ( 'NOT FOUND RECORD!' );

??????????? ? 15 ??????? END ;

??????????? ? 16 ? /

??????????? Enter value for inputid : 7788

??????????? old ?? 7 : ???????? v_id :=& inputid ;

??????????? new ?? 7 : ???????? v_id := 7788 ;

??????????? 7788 NAME : SCOTT

??????????? 7788 job : ANALYST

??????????? 7788 sal : 3000

?

??????????? PL / SQL procedure successfully completed .

???????

???????

???????????

??????? -- 例:執行 UPDATE

??????????? scott@ORCL > DECLARE

??????????? ? 2 ??????? v_sal emp . sal % TYPE ;

??????????? ? 3 ??????? old_sal emp . sal % TYPE ;

??????????? ? 4 ??????? v_id emp . empno % TYPE ;

??????????? ? 5 ????? BEGIN

??????????? ? 6 ??????? v_sal :=& inputsal ;

??????????????? ? v_id :=& inputid ;

??????????? ? 7 ??????? v_id :=& inputid ;

??????????? ? 8 ??????? SELECT sal INTO old_sal FROM emp WHERE empno = v_id ;

??????????? ? 9 ??????? UPDATE emp SET sal = v_sal WHERE empno = v_id ;

??????????? ? 10 ??????? DBMS_OUTPUT . PUT_LINE ( 'old sal:' || old_sal );

??????????? ? 11 ??????? DBMS_OUTPUT . PUT_LINE ( 'new sal:' || v_sal );

??????????? ? 12 ????? END ;

??????????? ? 13 ????? /

??????????? Enter value for inputsal : 3500

??????????? old ?? 6 : ?????? v_sal :=& inputsal ;

??????????? new ?? 6 : ?????? v_sal := 3500 ;

??????????? Enter value for inputid : 7788

??????????? old ?? 7 : ?????? v_id :=& inputid ;

??????????? new ?? 7 : ?????? v_id := 7788 ;

??????????? old sal : 3000

??????????? new sal : 3500

?

??? ??????? PL / SQL procedure successfully completed .

?

四、更多參考

?

??? 有關 SQL 請參考 ?

??????? SQL 基礎--> 子查詢

??????? SQL 基礎--> 多表查詢

SQL 基礎--> 分組與分組函數

SQL 基礎--> 常用函數

SQL 基礎--> ROLLUP 與CUBE 運算符實現數據匯總

SQL 基礎--> 層次化查詢(START BY ... CONNECT BY PRIOR)

?

??? 有關 PL/SQL 請參考

??????? PL/SQL --> 語言基礎

PL/SQL --> 流程控制

PL/SQL --> 存儲過程

PL/SQL --> 函數

PL/SQL --> 游標

PL/SQL --> 隱式游標(SQL%FOUND)

PL/SQL --> 異常處理(Exception)

PL/SQL --> PL/SQL 記錄

PL/SQL --> 包的創建與管理

PL/SQL --> 包重載、初始化

PL/SQL --> DBMS_DDL 包的使用

PL/SQL --> DML 觸發器

PL/SQL --> INSTEAD OF 觸發器

?

?

?

?

PL/SQL --> 語言基礎


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产成人禁片免费观看视频 | 爱爱视频免费网址 | 欧美一区三区 | 伊人伊色 | 亚洲综合专区 | 欧美成人怡红院在线观看 | 亚洲免费色视频 | 天天操天天干天天摸 | 日本猛妇色xxxxx在线 | 高清国产精品入口麻豆 | 香蕉成人国产精品免费看网站 | 亚洲视频www| 国产欧美一区二区三区免费 | 四虎国产免费 | 国产激情在线视频 | 四虎成人欧美精品在永久在线 | 成人看片黄a免费 | 国产香蕉在线 | 久草视频在线网 | 欧美在线一区二区三区 | 免费一级欧美片在线观免看 | 狼狼色丁香久久女婷婷综合 | 亚洲羞羞视频 | 天天干在线观看 | 国产精品久久久久久久hd | 精品国产乱码久久久久久浪潮 | 四虎影视免费 | 国产精品九九热 | 国内精品小视频 | 成人亚洲国产 | 一道精品视频一区二区三区图片 | 亚洲一区亚洲二区 | 久久精品国产91久久麻豆自制 | 91青青青国产在观免费影视 | 久久久国产精品免费 | 久久五月天综合 | 久久国产影视 | 欧美videofree高清杂交 | 91视频青娱乐 | 99免费精品 | 5060网一级毛片免费观看 |