版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
福建工程學院第10章PL/SQL編程基礎1本章要點編寫PL/SQL匿名塊聲明PL/SQL變量、常量、數(shù)據(jù)類型介紹賦值語句和算術(shù)運算符理解%TYPE屬性掌握各種變量的范圍和使用如何在PL/SQL塊中編寫可執(zhí)行的代碼掌握DBMS_OUTPUT包與輸入輸出嵌套塊應遵循的規(guī)則準備編寫簡單的PL/SQL塊什么是PL/SQL
PL/SQL(Procedurallanguage/SQL)是過程語言(ProceduralLanguage)與結(jié)構(gòu)化查詢語言(SQL)結(jié)合而成的編程語言。
PL/SQL是對SQL的擴展PL/SQL支持現(xiàn)代軟件工程的很多重要特征,
如:數(shù)據(jù)封裝、面向?qū)ο缶幊蹋∣OP)、錯誤(例外)處理和信息隱藏等。PL/SQL是一種“后臺技術(shù)”,它的輸入輸出是面向數(shù)據(jù)庫的,主要用于編寫服務器端的程序。什么是PL/SQL
支持多種數(shù)據(jù)類型,如大對象和集合類型,可使用條件和循環(huán)等控制結(jié)構(gòu),給SQL語句的執(zhí)行添加程序邏輯。PL/SQL是Oracle數(shù)據(jù)庫的核心編程語言,用于編寫存儲過程、函數(shù)、觸發(fā)器、包,面向?qū)ο髷?shù)據(jù)庫的類的定義等等。與Oracle服務器和Oracle工具緊密集成,具備可移植性、靈活性和安全性。PL/SQL簡介支持SQL,在PL/SQL中可以使用:數(shù)據(jù)操縱命令事務控制命令游標控制SQL函數(shù)和SQL運算符可移植性,可運行在任何操作系統(tǒng)和平臺上的Oralce數(shù)據(jù)庫更佳的性能,PL/SQL經(jīng)過編譯執(zhí)行安全性,可以通過存儲過程限制用戶對數(shù)據(jù)的訪問用戶將整個語句塊發(fā)送給OracleOracleProcedureBeginProcedureCallSQLCommand…EndPL/SQL簡介PL/SQL引擎駐留在Oracle服務器中該引擎接受PL/SQL塊并對其進行編譯執(zhí)行將PL/SQL塊發(fā)送給Oracle服務器用戶執(zhí)行過程語句引擎將SQL語句發(fā)送給SQL語句執(zhí)行器Oracle服務器PL/SQL引擎SQL
語句
執(zhí)行器過程語句
執(zhí)行器執(zhí)行SQL語句將結(jié)果發(fā)送給用戶PL/SQL基本原理PL/SQL程序中可以使用大寫或小寫字母一個完整的語句可以占若干行,但關(guān)鍵字不能被分開寫在兩行。PL/SQL語句包括保留字,標識符,定界符,字面值和注釋保留字(關(guān)鍵字):專門用途的單詞用戶定義標識符:用來命名變量、常量、過程、函數(shù)、游標、表、記錄和異常。字面值:數(shù)字類型,字符類型和布爾類型注釋:對每個代碼段的目的和用途的描述PL/SQL塊的語法和原則標識符至多有30個字符允許使用字母,數(shù)字,$,#,_不能是保留字,但若保留字用雙引號標明,即可作為標識符(例如,"SELECT")。必須以字母開頭不允許與數(shù)據(jù)庫中表的列名相同保留字應為大寫形式,以提高可讀性。PL/SQL塊的語法和原則字面值字面值是精確的數(shù)值、字符、串或布爾值。字符或日期型文字必須用單引號標識。數(shù)字可以是簡單的值(如,–32.5),也可是用科學計數(shù)法表示的數(shù)值(如,2E5,意義2*105=200000)。v_ename:='Henderson';注釋在單行注釋前加前綴雙短線(--)。多行注釋放在/*和*/之間。舉例:用月工資計算年工資.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程序提供了對一個內(nèi)部緩沖區(qū)的輸入輸出功能DBMS_OUTPUT包中的過程實現(xiàn)了兩個基本操作:GET和PUTPUT操作是將過程參數(shù)中的數(shù)據(jù)放入到一個內(nèi)部緩沖區(qū)中,而GET操作則是從這個緩沖區(qū)中讀出數(shù)據(jù),并將其內(nèi)容作為參數(shù)值返回DBMS_OUTPUT包與輸入輸出在PL/SQL中顯示輸出結(jié)果要使用該方法顯示輸出數(shù)據(jù),必須將環(huán)境變量作如下的設置:
SETSERVEROUTPUTON
DBMS_OUTPUT.PUT(字符串表達式);
用于輸出字符串,但不換行,括號中的參數(shù)是要輸出的字符串表達式。DBMS_OUTPUT.PUT_LINE(字符串表達式);
用于輸出一行字符串信息,并換行,括號中的參數(shù)是要輸出的字符串表達式。DBMS_OUTPUT.NEW_LINE;
用來輸出一個換行,沒有參數(shù)。
DBMS_OUTPUT包與輸入輸出注釋、替換變量與
DBMS_OUTPUT包使用實例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)境中運行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ù)有以下幾類:錯誤報告函數(shù)(Errorreporting)數(shù)字函數(shù)(Number)字符函數(shù)(Character)轉(zhuǎn)換函數(shù)(Conversion)日期函數(shù)(Date)雜項函數(shù)(Miscellaneous)PL/SQL函數(shù)例:給一個公司創(chuàng)建一個通信地址.把員工名轉(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是一個SQL函數(shù),把ASCII碼轉(zhuǎn)換成相應的字符‘-’。數(shù)據(jù)類型轉(zhuǎn)換函數(shù) 把數(shù)據(jù)轉(zhuǎn)換成可比較的數(shù)據(jù)類型?;旌系臄?shù)據(jù)類型可能會出現(xiàn)錯誤,影響性能轉(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型,該語句就會產(chǎn)生一個編譯錯誤。v_date:='January13,1998';v_date:=TO_DATE('January13,1998','MonthDD,YYYY');使用TO_DATE轉(zhuǎn)換函數(shù)可改正錯誤。PL/SQL塊結(jié)構(gòu)DECLARE–
可選變量、游標、例外聲明用戶自定義的特殊類型BEGIN–
必須SQL語句PL/SQL語句EXCEPTION–
可選錯誤發(fā)生時的處理動作END;–
必須DECLAREBEGINEXCEPTIONEND;PL/SQL是塊結(jié)構(gòu)化語言,即程序能被分成若干個邏輯塊。愉中對象有自己的作用域。一個PL/SQL塊有三個部分構(gòu)成:聲明(可選),執(zhí)行(必須)和異常處理(可選)??蛇x的該部分給出當在執(zhí)行部分發(fā)生錯誤或出現(xiàn)異常情況時的具體處理動作。可嵌套塊。異常處理部分必須的該部分包括SQL語句(用于處理數(shù)據(jù)庫中的數(shù)據(jù))及PL/SQL語句(用于處理塊中的數(shù)據(jù))。可嵌套塊。執(zhí)行部分可選的該部分包括所有在聲明、執(zhí)行部分所用到的變量、常量、游標以及用戶自定義的特殊類型。
聲明部分備注描述塊結(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)的聲明和語句組合在一起
寫一個簡單的PL/SQL過程,輸出HelloWorld!!!setserveroutputonbegindbms_output.put_line('HelloWorld!!!');end;/當該塊成功執(zhí)行,沒有任何未經(jīng)處理的錯誤和編譯錯誤時,將會顯示如下語句:PL/SQL過程已成功完成。PL/SQLproceduresuccessfullycompletedPL/SQL塊的執(zhí)行過程與運行環(huán)境
PL/SQL塊的編輯環(huán)境有如下幾種:(1)Oracle工具。Oracle9i
中的SQL*plusWorksheet,Oracle10g中的iSQL*Plus。(2)嵌入在應用程序中。(3)使用記事本寫腳本,以SQL為文件后綴名進行保存。輸入如下的程序: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塊后輸入符號“/”來執(zhí)行的。PL/SQL塊如下:執(zhí)行方法:SQL>/PL/SQLproceduresuccessfullycompleted.或者SQL>RUN如果是腳本可以:SQL>@腳本文件名(2)在工具SQLPlusWorksheet(Oracle9i)中直接執(zhí)行,或在工具iSQL*Plus(Oracle10g)中執(zhí)行。塊包括兩種類型:匿名塊和命名塊匿名塊匿名塊是沒有被命名的塊。他們是在應用程序即將執(zhí)行時被聲明,在運行期間被傳遞給PL/SQL引擎執(zhí)行。命名塊子程序是被命名的PL/SQL塊,能接收參數(shù),能被調(diào)用。子程序存儲在服務器或應用程序?qū)又小K梢月暶鳛檫^程(procedure)也可以為函數(shù)(function),通常僅執(zhí)行一動作時定義為過程,計算值時定義為函數(shù)。包(package)是由一組過程和函數(shù)組成。觸發(fā)器(trigger)是由DML語句以隱含方式調(diào)用的一個塊。附注:函數(shù)類似于過程,只是函數(shù)必須返回一個值。塊的類型塊的類型匿名塊 過程函數(shù)[DECLARE]BEGIN--statements[EXCEPTION]END;PROCEDUREnameISBEGIN--statements[EXCEPTION]END;FUNCTIONnameRETURNdatatypeISBEGIN--statementsRETURNvalue;[EXCEPTION]END;程序結(jié)構(gòu)匿名塊應用程序觸發(fā)器已存儲的過程/函數(shù)數(shù)據(jù)庫觸發(fā)器應用程序中的過程/函數(shù)打包的過程/函數(shù)DECLAREBEGINEXCEPTIONEND;Developer/2000組件--例如,表單PL/SQL塊,與應用程序有關(guān);能自動執(zhí)行。應用程序觸發(fā)器Oracle服務器PL/SQL塊,與數(shù)據(jù)庫中的表有關(guān);由DML語句觸發(fā),自動執(zhí)行。數(shù)據(jù)庫觸發(fā)器Oracle服務器和Developer/2000組件--例如,表單有命名的PL/SQL模塊,是一組相關(guān)的過程、函數(shù)和標識符。包Developer/2000組件--例如,表單有命名的PL/SQL塊,存儲在Developer/2000應用程序中或被庫共享;可通過名字被重復調(diào)用。應用程序中的過程/函數(shù)Oracle服務器有命名的PL/SQL塊;存儲在Oracle服務器中;能接受參數(shù);可通過名字被重復調(diào)用。已存儲的過程/函數(shù)所有PL/SQL環(huán)境未被命名的PL/SQL塊;可嵌入到應用程序中亦可交互使用。匿名塊適用性描述程序結(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標量類型數(shù)字字符布爾型日期時間LOB類型BFILEBLOBCLOBNCLOB%TYPE提供某個變量或數(shù)據(jù)庫表列的數(shù)據(jù)類型提供表示表中一行的記錄類型復合類型PL/SQl數(shù)據(jù)類型和操作符指定數(shù)值的存儲格式BINARY_INTEGER(-2^31=1~2^31-1)INTEGERINTSMALLINTPOSTIVE0~2^31不能為空NATURAL1~2^31不能為空PLS_INTEGERNUMBERDEC(定點數(shù))DECIMAL(定點數(shù))NUMERIC(定點數(shù))FLOAT(浮點數(shù))REAL(浮點數(shù))DOUBLEPRECISION(浮點數(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)點:不需要知道被引用的表列的具體類型如果被引用對象的數(shù)據(jù)類型發(fā)生改變,PL/SQL變量的數(shù)據(jù)類型也隨之改變bhemp.empno%TYPE;emp_recscott.emp%ROWTYPE;變量的使用
PL/SQL中可以聲明變量,繼而在SQL中使用它們,也可在任一過程語句的表達式中使用。數(shù)據(jù)的臨時存儲在數(shù)據(jù)流過程執(zhí)行之前需輸入合法的數(shù)據(jù),這些數(shù)據(jù)將被暫時存放在一個或多個變量中。對其值的操作無須訪問數(shù)據(jù)庫,通過變量就可進行計算和對其他數(shù)據(jù)操作。重復使用變量一經(jīng)聲明,就可在應用程序中重復使用。簡單地通過引用,其他語句(包括其他的聲明語句)即可重復使用這些變量。易于維護PL/SQL變量定義PL/SQL塊中可以使用變量和常量在聲明部分聲明,使用前必須先聲明聲明時必須指定數(shù)據(jù)類型,每行聲明一個標識符在可執(zhí)行部分的SQL語句和過程語句中使用聲明變量和常量的語法:identifier[CONSTANT]datatype[NOTNULL] [:=|DEFAULTexpr];給變量賦值有兩種方法:使用賦值語句:=使用SELECTINTO語句PL/SQL中的變量的操作在聲明部分聲明并初始化變量。在執(zhí)行部分為變量指派新值。通過參數(shù)把值傳遞給PL/SQL塊。通過輸出變量顯示結(jié)果。作用:變量主要用于程序與數(shù)據(jù)庫之間的數(shù)據(jù)交換以及保存程序的中間結(jié)果。變量的類型PL/SQL變量標量型復合型引用型LOB型(大型的對象)外部變量綁定變量和主變量主要的標量數(shù)據(jù)類型:VARCHAR2(最大長度)NUMBER[(精度,刻度)]DATECHAR[(最大長度)]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ī)則遵循命名的慣例??梢园戳晳T命名—例如v_name
代表一個變量和c_name代表一個常變量,g_代表
global變量。初始化NOTNULL型變量。用賦值操作符(:=)或用DEFAULT關(guān)鍵字給變量賦初始值。每行至多聲明一個標識符。聲明常量時,必須在類型說明符之前標明關(guān)鍵字CONSTANT,并給該常量賦初值。命名規(guī)則不同塊中的兩個變量可以同名。變量的名字(標識符)不能與塊中表的列同名。DECLAREempno NUMBER(4);BEGINSELECT empno INTO empno FROM empWHEREename='SMITH';END;變量的賦值v_ename:='Maduro';v_hiredate:='31-DEC-98';語法舉例為新員工設定雇傭的日期員工的名字設定為“Maduro”identifier:=expr;變量的初始化和關(guān)鍵字使用:=(賦值操作符)DEFAULT(缺?。㎞OTNULL(非空)標量類型僅有一個值內(nèi)部沒有分量25-OCT-99Atlanta“Fourscoreandsevenyearsagoourfathersbroughtforthuponthiscontinent,anewnation,conceivedinLIBERTY,anddedicatedtothepropositionthatallmenarecreatedequal.”TRUE256120.08基本標量類型VARCHAR2(最大長度)NUMBER[(精度,刻度)]DATECHAR[(最大長度)]LONGLONGRAWBOOLEANBINARY_INTEGERPLS_INTEGER數(shù)據(jù)類型描述VARCHAR2(最大長度)變長字符的基本類型,最大的存儲數(shù)據(jù)是32767字節(jié)。VARCHAR2型的變量和常量沒有默認的長度。NUMBER[(精度,刻度)]整數(shù)和浮點數(shù)的基本類型。DATE日期和時間的基本類型。DATE類型來存儲包含從一天的午夜開始的定長的時間。有效的時間范圍是從公元前4712年1月1號開始到公元9999年12月31號。CHAR[(最大長度)]固定長度字符數(shù)據(jù)的基本類型,最大有32767字節(jié)。如果沒有指定的最大值,缺省值為1。LONG變長字符串的基本類型,最大長度是32760字節(jié)。LONG型的數(shù)據(jù)庫列的最大長度是2147483647字節(jié)。LONGRAW二進制數(shù)據(jù)和字節(jié)字符串的基本類型,最大字節(jié)為32760。PL/SQL不能解釋LONGRAW型的數(shù)據(jù)。BOOLEAN存儲邏輯值——TRUE、FALSE和NULL的基本類型。BINARY_INTEGER介于-2147483647和2147483647之間有符號整數(shù)的基本類型。與NUMBER相比,BINARY_INTEGE占有較少的存儲空間PLS_INTEGER介于-2147483647和2147483647之間有符號整數(shù)的基本類型。與NUMBER和BINARY_INTEGER相比,PLS_INTEGER占有較少的存儲空間且運行效率高。標量型變量的聲明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之后;變量聲明時如果不賦值,其值為NULL;變量聲明時如果設置為NOTNULL,則一定要在聲明時使用“:=”或者“DEFAULT”賦初值。變量在程序體中可以用“:=”或者“SELECT…INTO…”賦值常量聲明時一定要賦值,在程序中只能引用,不能修改2.使用%type定義變量%type
類型定義的變量是“不知道”的類型變量。這個變量的類型與表中字段的類型是一致。為了讓PL/SQL中變量的類型和數(shù)據(jù)表中的字段的數(shù)據(jù)類型一致,Oracle提供了%type定義方法。語法格式如下:<變量名稱><變量名|字段名>%TYPE;其中,如果是如下形式:<變量名稱><變量名>%TYPE;表明<變量名稱>和<變量名>的類型是相同的。如果是如下形式:<變量名稱><字段名>%TYPE;表明<變量名稱>和<字段名>的類型是相同的。例如:V_NAMEEMP.ENAME%TYPE;但是當數(shù)據(jù)表的字段類型修改后,PL/SQL程序中相應變量的類型也自動修改。使用%rowtype定義變量使用%type可以使變量獲得字段的數(shù)據(jù)類型,但是使用%rowtype可以使變量獲得整個記錄的數(shù)據(jù)類型。二者在定義上也不同,%rowtype的語法格式是:<變量名稱><數(shù)據(jù)表的名稱>%rowtype;%rowtype的屬性如下:(1)與%TYPE作用類似,用于定義不確定的類型。(2)變量類型將定義為由數(shù)據(jù)庫的表的字段集合構(gòu)成的RECORD類型。(3)%rowtype的前綴是數(shù)據(jù)庫的表名,或者另一個已經(jīng)定義好的RECORD變量。(4)RECORD中的域,與表的字段的名稱和數(shù)據(jù)類型完全相同。%TYPE的屬性聲明的變量對應于:數(shù)據(jù)庫的列其它先前聲明過的變量在%TYPE前綴上:數(shù)據(jù)庫中表和列名先前聲明過的變量名優(yōu)點:利于書寫和維護代碼,因為不必要因數(shù)據(jù)庫中列的修改而去修改PL/SQL塊。能和表中列的數(shù)據(jù)類型保持一致可以與先前聲明過的變量保持一致用%TYPE聲明變量舉例...v_ename emp.ename%TYPE;v_balance NUMBER(7,2); v_min_balance v_balance%TYPE:=10;... 聲明布爾型變量布爾型變量僅有三個值—TRUE、FALSE和NULL.布爾型變量由邏輯運算符—AND、OR和NOT連接.布爾型變量輸出三個值—TRUE、FALSE或NULL.算術(shù)、字符和日期表達式可以返回一個布爾值。復合類型類型PL/SQL表(tables)PL/SQL記錄(records)PL/SQL可變數(shù)組(varrays)LOB型變量食譜(CLOB)照片(BLOB)電影(BFILE)NCLOB鍵盤輸入(替換變量)鍵盤輸入是通過在變量名前面加一個“&”符號實現(xiàn)的,如:&V_INPUT。如果此變量是數(shù)值型(如:number,integer等),在提示輸入時直接輸入數(shù)據(jù);如果此變量是字符型(如:varchar2()等),有兩個辦法輸入:如果書寫時是:&V_INPUT,那么輸入時要加單引號“'”把字符串引起來;如果書寫時是:'&V_INPUT',那么輸入時不要加單引號,直接輸入字符串。外部變量(綁定變量)Server外部變量(BindVariable)外部變量是在某一程序的主環(huán)境下聲明的一種變量,用來把運行時的值(可以是數(shù)字、字符)傳入或傳出一個或更多PL/SQL程序,在這個程序中可以像其他變量一樣使用外部變量。在主環(huán)境或一個調(diào)用環(huán)境(可以是由過程、函數(shù)或包的PL/SQL語句調(diào)用的)下,聲明外部變量,之后就可引用這些外部變量了。外部變量(綁定變量)外部變量是在程序運行的主環(huán)境中定義的變量在PL/SQL中引用外部變量需要在外部變量前加”:”在PL/SQL中可以象使用自己的變量一樣使用外部變量。外部變量使得PL/SQL可以與主機環(huán)境之間傳遞數(shù)據(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í)行的語句能運行,其所在的塊就能被嵌套。一個嵌套塊可看作是一個語句。異常處理部分可以包含若干嵌套塊。一個對象的作用域是指所涉及到該對象的程序的區(qū)域。嵌套塊和變量的作用域一個標識符只有在它的作用域中用一個不限定的名字來引用時才是可見的:塊可以由內(nèi)向外查找標識符。(如在嵌套塊的父塊中的聲明部分進行查找)塊不可以由外向內(nèi)查找標識符。(如不會向內(nèi)在其子塊或其兄弟塊中查找)附注:可以使用塊標簽作為前綴限定一個標識符。
嵌套塊和變量的作用域...xBINARY_INTEGER;BEGIN...DECLAREyNUMBER;BEGIN...END;...END;
x的范圍Y的范圍舉例決定變量的作用域本課習題...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;習題1. 子塊中的V_MESSAGE.2. 主塊中的V_TOTAL_COMP.3. 子塊中的V_COMM.4. 主塊中的V_COMM.5. 主塊中的V_MESSAGE.PL/SQL中的運算符邏輯運算符算術(shù)運算符連接運算符控制運算符次序的括號求冪運算符(**)與SQL中同}PL/SQL中的特殊運算符運
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 海外知識產(chǎn)權(quán)培訓
- 碾泥工崗前規(guī)章考核試卷含答案
- 礦山設備運行協(xié)調(diào)員道德評優(yōu)考核試卷含答案
- 海員基本安全培訓
- 丁腈橡膠裝置操作工崗前創(chuàng)新思維考核試卷含答案
- 客運船舶駕駛員崗前實操知識技能考核試卷含答案
- 高空作業(yè)機械裝配調(diào)試工測試驗證考核試卷含答案
- 酒店員工培訓資料管理與更新制度
- 酒店客房裝修改造制度
- 酒店服務質(zhì)量監(jiān)控評估制度
- 2026年及未來5年市場數(shù)據(jù)中國工程擔保行業(yè)發(fā)展運行現(xiàn)狀及投資潛力預測報告
- (2026年春新版本)人教版二年級數(shù)學下冊全冊教案
- 2026陜西氫能產(chǎn)業(yè)發(fā)展有限公司所屬單位招聘(29人)備考題庫附答案
- 智慧旅游建設培訓班課件
- 2025年度康復科護理質(zhì)控工作總結(jié)與2026年規(guī)劃
- 2026年保育員初級考試試題及答案
- 社區(qū)干部法律培訓課件
- 新人培訓主播課件
- 2025年兩種人考試題庫附答案
- 鋁合金門窗安裝打膠方案
- GB/T 8642-2025熱噴涂抗拉結(jié)合強度的測定
評論
0/150
提交評論