版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
福建工程學(xué)院第10章PL/SQL編程基礎(chǔ)1本章要點(diǎn)編寫PL/SQL匿名塊聲明PL/SQL變量、常量、數(shù)據(jù)類型介紹賦值語句和算術(shù)運(yùn)算符理解%TYPE屬性掌握各種變量的范圍和使用如何在PL/SQL塊中編寫可執(zhí)行的代碼掌握DBMS_OUTPUT包與輸入輸出嵌套塊應(yīng)遵循的規(guī)則準(zhǔn)備編寫簡(jiǎn)單的PL/SQL塊什么是PL/SQL
PL/SQL(Procedurallanguage/SQL)是過程語言(ProceduralLanguage)與結(jié)構(gòu)化查詢語言(SQL)結(jié)合而成的編程語言。
PL/SQL是對(duì)SQL的擴(kuò)展PL/SQL支持現(xiàn)代軟件工程的很多重要特征,
如:數(shù)據(jù)封裝、面向?qū)ο缶幊蹋∣OP)、錯(cuò)誤(例外)處理和信息隱藏等。PL/SQL是一種“后臺(tái)技術(shù)”,它的輸入輸出是面向數(shù)據(jù)庫的,主要用于編寫服務(wù)器端的程序。什么是PL/SQL
支持多種數(shù)據(jù)類型,如大對(duì)象和集合類型,可使用條件和循環(huán)等控制結(jié)構(gòu),給SQL語句的執(zhí)行添加程序邏輯。PL/SQL是Oracle數(shù)據(jù)庫的核心編程語言,用于編寫存儲(chǔ)過程、函數(shù)、觸發(fā)器、包,面向?qū)ο髷?shù)據(jù)庫的類的定義等等。與Oracle服務(wù)器和Oracle工具緊密集成,具備可移植性、靈活性和安全性。PL/SQL簡(jiǎn)介支持SQL,在PL/SQL中可以使用:數(shù)據(jù)操縱命令事務(wù)控制命令游標(biāo)控制SQL函數(shù)和SQL運(yùn)算符可移植性,可運(yùn)行在任何操作系統(tǒng)和平臺(tái)上的Oralce數(shù)據(jù)庫更佳的性能,PL/SQL經(jīng)過編譯執(zhí)行安全性,可以通過存儲(chǔ)過程限制用戶對(duì)數(shù)據(jù)的訪問用戶將整個(gè)語句塊發(fā)送給OracleOracleProcedureBeginProcedureCallSQLCommand…EndPL/SQL簡(jiǎn)介PL/SQL引擎駐留在Oracle服務(wù)器中該引擎接受PL/SQL塊并對(duì)其進(jìn)行編譯執(zhí)行將PL/SQL塊發(fā)送給Oracle服務(wù)器用戶執(zhí)行過程語句引擎將SQL語句發(fā)送給SQL語句執(zhí)行器Oracle服務(wù)器PL/SQL引擎SQL
語句
執(zhí)行器過程語句
執(zhí)行器執(zhí)行SQL語句將結(jié)果發(fā)送給用戶PL/SQL基本原理PL/SQL程序中可以使用大寫或小寫字母一個(gè)完整的語句可以占若干行,但關(guān)鍵字不能被分開寫在兩行。PL/SQL語句包括保留字,標(biāo)識(shí)符,定界符,字面值和注釋保留字(關(guān)鍵字):專門用途的單詞用戶定義標(biāo)識(shí)符:用來命名變量、常量、過程、函數(shù)、游標(biāo)、表、記錄和異常。字面值:數(shù)字類型,字符類型和布爾類型注釋:對(duì)每個(gè)代碼段的目的和用途的描述PL/SQL塊的語法和原則標(biāo)識(shí)符至多有30個(gè)字符允許使用字母,數(shù)字,$,#,_不能是保留字,但若保留字用雙引號(hào)標(biāo)明,即可作為標(biāo)識(shí)符(例如,"SELECT")。必須以字母開頭不允許與數(shù)據(jù)庫中表的列名相同保留字應(yīng)為大寫形式,以提高可讀性。PL/SQL塊的語法和原則字面值字面值是精確的數(shù)值、字符、串或布爾值。字符或日期型文字必須用單引號(hào)標(biāo)識(shí)。數(shù)字可以是簡(jiǎn)單的值(如,–32.5),也可是用科學(xué)計(jì)數(shù)法表示的數(shù)值(如,2E5,意義2*105=200000)。v_ename:='Henderson';注釋在單行注釋前加前綴雙短線(--)。多行注釋放在/*和*/之間。舉例:用月工資計(jì)算年工資.SETSERVEROUTPUTONDECLAREv_salNUMBER(9,2);BEGIN/*Computetheannualsalarybasedonthemonthlysalaryinputfromtheuser*/v_sal:=&monthly_sal*12;DBMS_OUTPUT.PUT_LINE('Theannualsalaryis'||TO_CHAR(v_sal));END;--Thisistheendoftheblock/
在PL/SQL中顯示輸出結(jié)果DBMS_OUTPUT是Oracle提供的包DBMS_OUTPUT包為PL/SQL程序提供了對(duì)一個(gè)內(nèi)部緩沖區(qū)的輸入輸出功能DBMS_OUTPUT包中的過程實(shí)現(xiàn)了兩個(gè)基本操作:GET和PUTPUT操作是將過程參數(shù)中的數(shù)據(jù)放入到一個(gè)內(nèi)部緩沖區(qū)中,而GET操作則是從這個(gè)緩沖區(qū)中讀出數(shù)據(jù),并將其內(nèi)容作為參數(shù)值返回DBMS_OUTPUT包與輸入輸出在PL/SQL中顯示輸出結(jié)果要使用該方法顯示輸出數(shù)據(jù),必須將環(huán)境變量作如下的設(shè)置:
SETSERVEROUTPUTON
DBMS_OUTPUT.PUT(字符串表達(dá)式);
用于輸出字符串,但不換行,括號(hào)中的參數(shù)是要輸出的字符串表達(dá)式。DBMS_OUTPUT.PUT_LINE(字符串表達(dá)式);
用于輸出一行字符串信息,并換行,括號(hào)中的參數(shù)是要輸出的字符串表達(dá)式。DBMS_OUTPUT.NEW_LINE;
用來輸出一個(gè)換行,沒有參數(shù)。
DBMS_OUTPUT包與輸入輸出注釋、替換變量與
DBMS_OUTPUT包使用實(shí)例SETSERVEROUTPUTONDECLAREv_salNUMBER(9,2);BEGIN/*SQL中的替換變量在PL/SQL中仍然有效*/v_sal:=&monthly_sal*12;--不需要在程序塊中聲明替換變量DBMS_OUTPUT.PUT_LINE('Theannualsalaryis'
||TO_CHAR(v_sal));END;/以下程序只能在sql-plus環(huán)境中運(yùn)行PL/SQL中的SQL函數(shù)過程語句中的有效函數(shù):單行數(shù)字單行字符數(shù)據(jù)類型轉(zhuǎn)換日期過程語句中的無效函數(shù):DECODE分組函數(shù)。分組函數(shù)僅在PL/SQL塊中的SQL語句中適用。與SQL中同PL/SQL函數(shù)PL/SQL提供了大量的有效函數(shù)用來處理數(shù)據(jù),這些函數(shù)有以下幾類:錯(cuò)誤報(bào)告函數(shù)(Errorreporting)數(shù)字函數(shù)(Number)字符函數(shù)(Character)轉(zhuǎn)換函數(shù)(Conversion)日期函數(shù)(Date)雜項(xiàng)函數(shù)(Miscellaneous)PL/SQL函數(shù)例:給一個(gè)公司創(chuàng)建一個(gè)通信地址.把員工名轉(zhuǎn)換成小寫形式.v_mailing_address:=v_name||CHR(10)|| v_address||CHR(10)||v_state|| CHR(10)||v_zip;v_ename :=LOWER(v_ename);注解:CHR是一個(gè)SQL函數(shù),把ASCII碼轉(zhuǎn)換成相應(yīng)的字符‘-’。數(shù)據(jù)類型轉(zhuǎn)換函數(shù) 把數(shù)據(jù)轉(zhuǎn)換成可比較的數(shù)據(jù)類型?;旌系臄?shù)據(jù)類型可能會(huì)出現(xiàn)錯(cuò)誤,影響性能轉(zhuǎn)換函數(shù):TO_CHARTO_DATETO_NUMBERDECLAREv_dateVARCHAR2(15);BEGINSELECTTO_CHAR(hiredate, 'MON.DD,YYYY')INTOv_dateFROMempWHEREempno=7839;END;數(shù)據(jù)類型轉(zhuǎn)換函數(shù)如果variablev_date被聲明為DATE型,該語句就會(huì)產(chǎn)生一個(gè)編譯錯(cuò)誤。v_date:='January13,1998';v_date:=TO_DATE('January13,1998','MonthDD,YYYY');使用TO_DATE轉(zhuǎn)換函數(shù)可改正錯(cuò)誤。PL/SQL塊結(jié)構(gòu)DECLARE–
可選變量、游標(biāo)、例外聲明用戶自定義的特殊類型BEGIN–
必須SQL語句PL/SQL語句EXCEPTION–
可選錯(cuò)誤發(fā)生時(shí)的處理動(dòng)作END;–
必須DECLAREBEGINEXCEPTIONEND;PL/SQL是塊結(jié)構(gòu)化語言,即程序能被分成若干個(gè)邏輯塊。愉中對(duì)象有自己的作用域。一個(gè)PL/SQL塊有三個(gè)部分構(gòu)成:聲明(可選),執(zhí)行(必須)和異常處理(可選)??蛇x的該部分給出當(dāng)在執(zhí)行部分發(fā)生錯(cuò)誤或出現(xiàn)異常情況時(shí)的具體處理動(dòng)作。可嵌套塊。異常處理部分必須的該部分包括SQL語句(用于處理數(shù)據(jù)庫中的數(shù)據(jù))及PL/SQL語句(用于處理塊中的數(shù)據(jù))??汕短讐K。執(zhí)行部分可選的該部分包括所有在聲明、執(zhí)行部分所用到的變量、常量、游標(biāo)以及用戶自定義的特殊類型。
聲明部分備注描述塊結(jié)構(gòu)PL/SQL塊結(jié)構(gòu)PL/SQL塊結(jié)構(gòu)DECLAREv_variableVARCHAR2(5);BEGINSELECT column_nameINTO v_variableFROM table_name;EXCEPTIONWHENexception_nameTHEN...END;DECLAREBEGINEXCEPTIONEND;PL/SQL塊結(jié)構(gòu)PL/SQL塊是構(gòu)成PL/SQL程序的基本單元將邏輯上相關(guān)的聲明和語句組合在一起
寫一個(gè)簡(jiǎn)單的PL/SQL過程,輸出HelloWorld!!!setserveroutputonbegindbms_output.put_line('HelloWorld!!!');end;/當(dāng)該塊成功執(zhí)行,沒有任何未經(jīng)處理的錯(cuò)誤和編譯錯(cuò)誤時(shí),將會(huì)顯示如下語句:PL/SQL過程已成功完成。PL/SQLproceduresuccessfullycompletedPL/SQL塊的執(zhí)行過程與運(yùn)行環(huán)境
PL/SQL塊的編輯環(huán)境有如下幾種:(1)Oracle工具。Oracle9i
中的SQL*plusWorksheet,Oracle10g中的iSQL*Plus。(2)嵌入在應(yīng)用程序中。(3)使用記事本寫腳本,以SQL為文件后綴名進(jìn)行保存。輸入如下的程序:DECLAREv_comm_percentCONSTANTnumber:=10;BEGINupdateEMPSETcomm=sal*v_comm_percentWHEREdeptno=10;END;執(zhí)行PL/SQL塊。PL/SQL塊的執(zhí)行方法有兩種:(1)SQL命令行。SQL*Plus中匿名的PL/SQL塊的執(zhí)行是在PL/SQL塊后輸入符號(hào)“/”來執(zhí)行的。PL/SQL塊如下:執(zhí)行方法:SQL>/PL/SQLproceduresuccessfullycompleted.或者SQL>RUN如果是腳本可以:SQL>@腳本文件名(2)在工具SQLPlusWorksheet(Oracle9i)中直接執(zhí)行,或在工具iSQL*Plus(Oracle10g)中執(zhí)行。塊包括兩種類型:匿名塊和命名塊匿名塊匿名塊是沒有被命名的塊。他們是在應(yīng)用程序即將執(zhí)行時(shí)被聲明,在運(yùn)行期間被傳遞給PL/SQL引擎執(zhí)行。命名塊子程序是被命名的PL/SQL塊,能接收參數(shù),能被調(diào)用。子程序存儲(chǔ)在服務(wù)器或應(yīng)用程序?qū)又?。它可以聲明為過程(procedure)也可以為函數(shù)(function),通常僅執(zhí)行一動(dòng)作時(shí)定義為過程,計(jì)算值時(shí)定義為函數(shù)。包(package)是由一組過程和函數(shù)組成。觸發(fā)器(trigger)是由DML語句以隱含方式調(diào)用的一個(gè)塊。附注:函數(shù)類似于過程,只是函數(shù)必須返回一個(gè)值。塊的類型塊的類型匿名塊 過程函數(shù)[DECLARE]BEGIN--statements[EXCEPTION]END;PROCEDUREnameISBEGIN--statements[EXCEPTION]END;FUNCTIONnameRETURNdatatypeISBEGIN--statementsRETURNvalue;[EXCEPTION]END;程序結(jié)構(gòu)匿名塊應(yīng)用程序觸發(fā)器已存儲(chǔ)的過程/函數(shù)數(shù)據(jù)庫觸發(fā)器應(yīng)用程序中的過程/函數(shù)打包的過程/函數(shù)DECLAREBEGINEXCEPTIONEND;Developer/2000組件--例如,表單PL/SQL塊,與應(yīng)用程序有關(guān);能自動(dòng)執(zhí)行。應(yīng)用程序觸發(fā)器Oracle服務(wù)器PL/SQL塊,與數(shù)據(jù)庫中的表有關(guān);由DML語句觸發(fā),自動(dòng)執(zhí)行。數(shù)據(jù)庫觸發(fā)器Oracle服務(wù)器和Developer/2000組件--例如,表單有命名的PL/SQL模塊,是一組相關(guān)的過程、函數(shù)和標(biāo)識(shí)符。包Developer/2000組件--例如,表單有命名的PL/SQL塊,存儲(chǔ)在Developer/2000應(yīng)用程序中或被庫共享;可通過名字被重復(fù)調(diào)用。應(yīng)用程序中的過程/函數(shù)Oracle服務(wù)器有命名的PL/SQL塊;存儲(chǔ)在Oracle服務(wù)器中;能接受參數(shù);可通過名字被重復(fù)調(diào)用。已存儲(chǔ)的過程/函數(shù)所有PL/SQL環(huán)境未被命名的PL/SQL塊;可嵌入到應(yīng)用程序中亦可交互使用。匿名塊適用性描述程序結(jié)構(gòu)TRUE變量類型
P20025-OCT-99Atlanta“Fourscoreandsevenyearsagoourfathersbroughtforthuponthiscontinent,anewnation,conceivedinLIBERTY,anddedicatedtothepropositionthatallmenarecreatedequal.”256120.08PL/SQl數(shù)據(jù)類型和操作符PL/SQL支持的內(nèi)置數(shù)據(jù)類型數(shù)據(jù)類型引用類型%ROWTYPE標(biāo)量類型數(shù)字字符布爾型日期時(shí)間LOB類型BFILEBLOBCLOBNCLOB%TYPE提供某個(gè)變量或數(shù)據(jù)庫表列的數(shù)據(jù)類型提供表示表中一行的記錄類型復(fù)合類型PL/SQl數(shù)據(jù)類型和操作符指定數(shù)值的存儲(chǔ)格式BINARY_INTEGER(-2^31=1~2^31-1)INTEGERINTSMALLINTPOSTIVE0~2^31不能為空NATURAL1~2^31不能為空PLS_INTEGERNUMBERDEC(定點(diǎn)數(shù))DECIMAL(定點(diǎn)數(shù))NUMERIC(定點(diǎn)數(shù))FLOAT(浮點(diǎn)數(shù))REAL(浮點(diǎn)數(shù))DOUBLEPRECISION(浮點(diǎn)數(shù))PL/SQl數(shù)據(jù)類型和操作符字符數(shù)據(jù)類型包括:CHARVARCHAR2LONGRAWLONGRAWPL/SQL的數(shù)據(jù)類型與SQL數(shù)據(jù)類型的比較數(shù)據(jù)類型SQL類型PL/SQL類型CHAR1..20001..32767LONG1..2GB1..32760LONGRAW1..2GB1..32760RAW1..20001..32767VARCHAR21..40001..32767PL/SQl數(shù)據(jù)類型和操作符用于引用數(shù)據(jù)庫列的數(shù)據(jù)類型,以及表示表中一行的記錄類型屬性類型有兩種:%TYPE-引用變量和數(shù)據(jù)庫列的數(shù)據(jù)類型%ROWTYPE-提供表示表中一行的記錄類型使用屬性類型的優(yōu)點(diǎn):不需要知道被引用的表列的具體類型如果被引用對(duì)象的數(shù)據(jù)類型發(fā)生改變,PL/SQL變量的數(shù)據(jù)類型也隨之改變bhemp.empno%TYPE;emp_recscott.emp%ROWTYPE;變量的使用
PL/SQL中可以聲明變量,繼而在SQL中使用它們,也可在任一過程語句的表達(dá)式中使用。數(shù)據(jù)的臨時(shí)存儲(chǔ)在數(shù)據(jù)流過程執(zhí)行之前需輸入合法的數(shù)據(jù),這些數(shù)據(jù)將被暫時(shí)存放在一個(gè)或多個(gè)變量中。對(duì)其值的操作無須訪問數(shù)據(jù)庫,通過變量就可進(jìn)行計(jì)算和對(duì)其他數(shù)據(jù)操作。重復(fù)使用變量一經(jīng)聲明,就可在應(yīng)用程序中重復(fù)使用。簡(jiǎn)單地通過引用,其他語句(包括其他的聲明語句)即可重復(fù)使用這些變量。易于維護(hù)PL/SQL變量定義PL/SQL塊中可以使用變量和常量在聲明部分聲明,使用前必須先聲明聲明時(shí)必須指定數(shù)據(jù)類型,每行聲明一個(gè)標(biāo)識(shí)符在可執(zhí)行部分的SQL語句和過程語句中使用聲明變量和常量的語法:identifier[CONSTANT]datatype[NOTNULL] [:=|DEFAULTexpr];給變量賦值有兩種方法:使用賦值語句:=使用SELECTINTO語句PL/SQL中的變量的操作在聲明部分聲明并初始化變量。在執(zhí)行部分為變量指派新值。通過參數(shù)把值傳遞給PL/SQL塊。通過輸出變量顯示結(jié)果。作用:變量主要用于程序與數(shù)據(jù)庫之間的數(shù)據(jù)交換以及保存程序的中間結(jié)果。變量的類型PL/SQL變量標(biāo)量型復(fù)合型引用型LOB型(大型的對(duì)象)外部變量綁定變量和主變量主要的標(biāo)量數(shù)據(jù)類型:VARCHAR2(最大長(zhǎng)度)NUMBER[(精度,刻度)]DATECHAR[(最大長(zhǎng)度)]LONGLONGRAWBOOLEANBINARY_INTEGERPLS_INTEGER聲明PL/SQL變量語法舉例identifier[CONSTANT]datatype[NOTNULL] [:=|DEFAULTexpr];Declare v_hiredate DATE; v_deptno NUMBER(2)NOTNULL:=10; v_location VARCHAR2(13):='Atlanta';c_ comm CONSTANTNUMBER:=1400;聲明PL/SQL變量規(guī)則遵循命名的慣例??梢园戳?xí)慣命名—例如v_name
代表一個(gè)變量和c_name代表一個(gè)常變量,g_代表
global變量。初始化NOTNULL型變量。用賦值操作符(:=)或用DEFAULT關(guān)鍵字給變量賦初始值。每行至多聲明一個(gè)標(biāo)識(shí)符。聲明常量時(shí),必須在類型說明符之前標(biāo)明關(guān)鍵字CONSTANT,并給該常量賦初值。命名規(guī)則不同塊中的兩個(gè)變量可以同名。變量的名字(標(biāo)識(shí)符)不能與塊中表的列同名。DECLAREempno NUMBER(4);BEGINSELECT empno INTO empno FROM empWHEREename='SMITH';END;變量的賦值v_ename:='Maduro';v_hiredate:='31-DEC-98';語法舉例為新員工設(shè)定雇傭的日期員工的名字設(shè)定為“Maduro”identifier:=expr;變量的初始化和關(guān)鍵字使用:=(賦值操作符)DEFAULT(缺省)NOTNULL(非空)標(biāo)量類型僅有一個(gè)值內(nèi)部沒有分量25-OCT-99Atlanta“Fourscoreandsevenyearsagoourfathersbroughtforthuponthiscontinent,anewnation,conceivedinLIBERTY,anddedicatedtothepropositionthatallmenarecreatedequal.”TRUE256120.08基本標(biāo)量類型VARCHAR2(最大長(zhǎng)度)NUMBER[(精度,刻度)]DATECHAR[(最大長(zhǎng)度)]LONGLONGRAWBOOLEANBINARY_INTEGERPLS_INTEGER數(shù)據(jù)類型描述VARCHAR2(最大長(zhǎng)度)變長(zhǎng)字符的基本類型,最大的存儲(chǔ)數(shù)據(jù)是32767字節(jié)。VARCHAR2型的變量和常量沒有默認(rèn)的長(zhǎng)度。NUMBER[(精度,刻度)]整數(shù)和浮點(diǎn)數(shù)的基本類型。DATE日期和時(shí)間的基本類型。DATE類型來存儲(chǔ)包含從一天的午夜開始的定長(zhǎng)的時(shí)間。有效的時(shí)間范圍是從公元前4712年1月1號(hào)開始到公元9999年12月31號(hào)。CHAR[(最大長(zhǎng)度)]固定長(zhǎng)度字符數(shù)據(jù)的基本類型,最大有32767字節(jié)。如果沒有指定的最大值,缺省值為1。LONG變長(zhǎng)字符串的基本類型,最大長(zhǎng)度是32760字節(jié)。LONG型的數(shù)據(jù)庫列的最大長(zhǎng)度是2147483647字節(jié)。LONGRAW二進(jìn)制數(shù)據(jù)和字節(jié)字符串的基本類型,最大字節(jié)為32760。PL/SQL不能解釋LONGRAW型的數(shù)據(jù)。BOOLEAN存儲(chǔ)邏輯值——TRUE、FALSE和NULL的基本類型。BINARY_INTEGER介于-2147483647和2147483647之間有符號(hào)整數(shù)的基本類型。與NUMBER相比,BINARY_INTEGE占有較少的存儲(chǔ)空間PLS_INTEGER介于-2147483647和2147483647之間有符號(hào)整數(shù)的基本類型。與NUMBER和BINARY_INTEGER相比,PLS_INTEGER占有較少的存儲(chǔ)空間且運(yùn)行效率高。標(biāo)量型變量的聲明v_job VARCHAR2(9);v_count BINARY_INTEGER:=0;v_total_sal NUMBER(9,2):=0;v_orderdate DATE:=SYSDATE+7;c_tax_rate CONSTANTNUMBER(3,2):=8.25;v_valid BOOLEANNOTNULL:=TRUE;舉例變量常量聲明、初始化和賦值DECLAREV_A1NUMBER;V_A2NUMBERNOTNULL:=2000;V_A3CONSTANTNUMBER:=3000;V_A4CONSTANTNUMBERDEFAULT4000;V_A5NUMBER;
BEGINV_A1:=1000;SELECTSALINTOV_A5FROMEMPWHEREEMPNO=7876;INSERTINTOTVALUES(V_A1);INSERTINTOTVALUES(V_A2);INSERTINTOTVALUES(V_A3);INSERTINTOTVALUES(V_A4);INSERTINTOTVALUES(V_A5);END;/變量不可以與塊中涉及的列同名變量聲明在DECLARE之后;變量聲明時(shí)如果不賦值,其值為NULL;變量聲明時(shí)如果設(shè)置為NOTNULL,則一定要在聲明時(shí)使用“:=”或者“DEFAULT”賦初值。變量在程序體中可以用“:=”或者“SELECT…INTO…”賦值常量聲明時(shí)一定要賦值,在程序中只能引用,不能修改2.使用%type定義變量%type
類型定義的變量是“不知道”的類型變量。這個(gè)變量的類型與表中字段的類型是一致。為了讓PL/SQL中變量的類型和數(shù)據(jù)表中的字段的數(shù)據(jù)類型一致,Oracle提供了%type定義方法。語法格式如下:<變量名稱><變量名|字段名>%TYPE;其中,如果是如下形式:<變量名稱><變量名>%TYPE;表明<變量名稱>和<變量名>的類型是相同的。如果是如下形式:<變量名稱><字段名>%TYPE;表明<變量名稱>和<字段名>的類型是相同的。例如:V_NAMEEMP.ENAME%TYPE;但是當(dāng)數(shù)據(jù)表的字段類型修改后,PL/SQL程序中相應(yīng)變量的類型也自動(dòng)修改。使用%rowtype定義變量使用%type可以使變量獲得字段的數(shù)據(jù)類型,但是使用%rowtype可以使變量獲得整個(gè)記錄的數(shù)據(jù)類型。二者在定義上也不同,%rowtype的語法格式是:<變量名稱><數(shù)據(jù)表的名稱>%rowtype;%rowtype的屬性如下:(1)與%TYPE作用類似,用于定義不確定的類型。(2)變量類型將定義為由數(shù)據(jù)庫的表的字段集合構(gòu)成的RECORD類型。(3)%rowtype的前綴是數(shù)據(jù)庫的表名,或者另一個(gè)已經(jīng)定義好的RECORD變量。(4)RECORD中的域,與表的字段的名稱和數(shù)據(jù)類型完全相同。%TYPE的屬性聲明的變量對(duì)應(yīng)于:數(shù)據(jù)庫的列其它先前聲明過的變量在%TYPE前綴上:數(shù)據(jù)庫中表和列名先前聲明過的變量名優(yōu)點(diǎn):利于書寫和維護(hù)代碼,因?yàn)椴槐匾驍?shù)據(jù)庫中列的修改而去修改PL/SQL塊。能和表中列的數(shù)據(jù)類型保持一致可以與先前聲明過的變量保持一致用%TYPE聲明變量舉例...v_ename emp.ename%TYPE;v_balance NUMBER(7,2); v_min_balance v_balance%TYPE:=10;... 聲明布爾型變量布爾型變量?jī)H有三個(gè)值—TRUE、FALSE和NULL.布爾型變量由邏輯運(yùn)算符—AND、OR和NOT連接.布爾型變量輸出三個(gè)值—TRUE、FALSE或NULL.算術(shù)、字符和日期表達(dá)式可以返回一個(gè)布爾值。復(fù)合類型類型PL/SQL表(tables)PL/SQL記錄(records)PL/SQL可變數(shù)組(varrays)LOB型變量食譜(CLOB)照片(BLOB)電影(BFILE)NCLOB鍵盤輸入(替換變量)鍵盤輸入是通過在變量名前面加一個(gè)“&”符號(hào)實(shí)現(xiàn)的,如:&V_INPUT。如果此變量是數(shù)值型(如:number,integer等),在提示輸入時(shí)直接輸入數(shù)據(jù);如果此變量是字符型(如:varchar2()等),有兩個(gè)辦法輸入:如果書寫時(shí)是:&V_INPUT,那么輸入時(shí)要加單引號(hào)“'”把字符串引起來;如果書寫時(shí)是:'&V_INPUT',那么輸入時(shí)不要加單引號(hào),直接輸入字符串。外部變量(綁定變量)Server外部變量(BindVariable)外部變量是在某一程序的主環(huán)境下聲明的一種變量,用來把運(yùn)行時(shí)的值(可以是數(shù)字、字符)傳入或傳出一個(gè)或更多PL/SQL程序,在這個(gè)程序中可以像其他變量一樣使用外部變量。在主環(huán)境或一個(gè)調(diào)用環(huán)境(可以是由過程、函數(shù)或包的PL/SQL語句調(diào)用的)下,聲明外部變量,之后就可引用這些外部變量了。外部變量(綁定變量)外部變量是在程序運(yùn)行的主環(huán)境中定義的變量在PL/SQL中引用外部變量需要在外部變量前加”:”在PL/SQL中可以象使用自己的變量一樣使用外部變量。外部變量使得PL/SQL可以與主機(jī)環(huán)境之間傳遞數(shù)據(jù)應(yīng)盡量減少使用外部變量,因?yàn)樗麜?huì)影響性能。為了盡量減少對(duì)主機(jī)的呼叫,可以將變量的值賦給局部變量。引用外部變量SQL>VARIABLEemp_numNUMBER--定義SQL*PLUS中的變量SQL>BEGIN2SELECTCOUNT(*)INTO:emp_num3FROMemp;4END;5/PL/SQL過程已成功完成。SQL>PRINTemp_num--在SQL*PLUS中顯示變量EMP_NUM----------13在SQL*PLUS環(huán)境中:嵌套塊和變量的作用域只要可執(zhí)行的語句能運(yùn)行,其所在的塊就能被嵌套。一個(gè)嵌套塊可看作是一個(gè)語句。異常處理部分可以包含若干嵌套塊。一個(gè)對(duì)象的作用域是指所涉及到該對(duì)象的程序的區(qū)域。嵌套塊和變量的作用域一個(gè)標(biāo)識(shí)符只有在它的作用域中用一個(gè)不限定的名字來引用時(shí)才是可見的:塊可以由內(nèi)向外查找標(biāo)識(shí)符。(如在嵌套塊的父塊中的聲明部分進(jìn)行查找)塊不可以由外向內(nèi)查找標(biāo)識(shí)符。(如不會(huì)向內(nèi)在其子塊或其兄弟塊中查找)附注:可以使用塊標(biāo)簽作為前綴限定一個(gè)標(biāo)識(shí)符。
嵌套塊和變量的作用域...xBINARY_INTEGER;BEGIN...DECLAREyNUMBER;BEGIN...END;...END;
x的范圍Y的范圍舉例決定變量的作用域本課習(xí)題...DECLAREV_SAL NUMBER(7,2):=60000;V_COMM NUMBER(7,2):=V_SAL*.20;V_MESSAGE VARCHAR2(255):='eligibleforcommission';BEGIN...DECLAREV_SAL NUMBER(7,2):=50000;V_COMM NUMBER(7,2):=0;V_TOTAL_COMP NUMBER(7,2):=V_SAL+V_COMM;BEGIN...V_MESSAGE:='CLERKnot'||V_MESSAGE;END;V_MESSAGE:='SALESMAN'||V_MESSAGE;END;習(xí)題1. 子塊中的V_MESSAGE.2. 主塊中的V_TOTAL_COMP.3. 子塊中的V_COMM.4. 主塊中的V_COMM.5. 主塊中的V_MESSAGE.PL/SQL中的運(yùn)算符邏輯運(yùn)算符算術(shù)運(yùn)算符連接運(yùn)算符控制運(yùn)算符次序的括號(hào)求冪運(yùn)算符(**)與SQL中同}PL/SQL中的特殊運(yùn)算符運(yùn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- (新教材)2026年滬科版七年級(jí)上冊(cè)數(shù)學(xué) 1.1 正數(shù)和負(fù)數(shù) 課件
- DB46-T 614-2023 石油化工企業(yè)消防安全管理規(guī)范
- 2025年便攜式監(jiān)護(hù)設(shè)備采購協(xié)議
- 2025年白酒渠道代理合作合同
- 2025年AI驅(qū)動(dòng)財(cái)稅申報(bào):發(fā)票數(shù)據(jù)精準(zhǔn)識(shí)別
- 第四單元 微專題 手拉手模型
- 大泡性視網(wǎng)膜脫離疑難病例討論課件
- 植保機(jī)械試題及答案詳解
- 2026 年中職景區(qū)服務(wù)與管理(景區(qū)運(yùn)營(yíng)管理)試題及答案
- 辦公家具租賃合同協(xié)議2025
- 2025年財(cái)政與稅務(wù)管理專業(yè)知識(shí)考試試卷及答案
- 2025年云南省人民檢察院聘用制書記員招聘(22人)考試筆試備考試題及答案解析
- 醫(yī)學(xué)生口腔種植術(shù)后疼痛管理課件
- 職業(yè)病防治案例警示與源頭管控
- 統(tǒng)編版三年級(jí)上冊(cè)道德與法治知識(shí)點(diǎn)及2025秋期末測(cè)試卷及答案
- 廣西柳州鐵路第一中學(xué)2026屆化學(xué)高三上期末質(zhì)量跟蹤監(jiān)視模擬試題含解析
- 露天采石場(chǎng)安全監(jiān)管
- 福建省福州市錢塘小學(xué)2025-2026學(xué)年三年級(jí)上學(xué)期期中素養(yǎng)測(cè)評(píng)數(shù)學(xué)試卷(含答案)
- 2025-2026學(xué)年人教版(新教材)小學(xué)信息科技三年級(jí)全一冊(cè)(上冊(cè))期末綜合測(cè)試卷及答案
- 2025年廣西普法考試題庫及答案
- 低碳飲食課件
評(píng)論
0/150
提交評(píng)論