PL/SQL

蕪湖網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),蕪湖網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為蕪湖數(shù)千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的蕪湖做網(wǎng)站的公司定做!
1、過程、函數(shù)、觸發(fā)器是pl/sql編寫的
2、過程、函數(shù)、觸發(fā)器是存放在oracle數(shù)據(jù)庫中的
3、pl/sql是非常強(qiáng)大的過程化語言
4、過程、函數(shù)、觸發(fā)器可以在java程序中調(diào)用
pl/sql編寫能節(jié)省一點(diǎn)時(shí)間就是提高了性能(量大),java直接調(diào)用數(shù)據(jù)庫存放的過程,解析時(shí)間就節(jié)省下來了,提高了性能
模塊化的設(shè)計(jì)思想-----》存儲(chǔ)過程
網(wǎng)絡(luò)傳輸(java程序中編寫的sql語言),直接調(diào)用數(shù)據(jù)庫的過程節(jié)省了傳輸量
提高安全性(存儲(chǔ)過程避免了數(shù)據(jù)庫信息的泄漏)
缺點(diǎn):
移植性不好
pl/sql編程基本單位是塊,通過塊可以編寫出過程、函數(shù)、觸發(fā)器、包
下面進(jìn)行一個(gè)最基本的編程
案例:向某表中插入一條數(shù)據(jù)
create or repalce procedure 名稱 is :replace表示如果名稱已存在,就替換
begin
insert into test values ('xiaoming','redhat')
end;
/
create procedure創(chuàng)建存儲(chǔ)過程關(guān)鍵字
or repalce:表示如果名稱已存在,就替換
is:也是關(guān)鍵字
存儲(chǔ)過程定義的頭和begin之間是定義部分(定義變量常量等等),后面提到
begin:關(guān)鍵字
end:結(jié)束符
begin與end結(jié)束之間就是執(zhí)行部分
上面一個(gè)簡(jiǎn)單的存儲(chǔ)過程是向某表中添加一條數(shù)據(jù),現(xiàn)在先創(chuàng)建一張表
SQL> create table names(name varchar2(20),password varchar2(30));
Table created.
然后通過編寫一個(gè)存儲(chǔ)過程向其中添加數(shù)據(jù)
SQL> create or replace procedure sp_pro1 is
2 begin
3 insert into names values ('xiaoming','redhat');
4 end;
5 /
Procedure created.
存儲(chǔ)過程已建立,該如何執(zhí)行呢?使用關(guān)鍵字exec或者call,如下
SQL> exec sp_pro1;
PL/SQL procedure successfully completed.
然后查詢表,看是否添加了數(shù)據(jù)
SQL> select * from names;
NAME PASSWORD
-------------------- ------------------------------
xiaoming redhat
當(dāng)若編寫的過程有誤時(shí),可以通過show error這條命令查看錯(cuò)誤具體信息
pl/sql編程是由最小單位塊組成的,看看塊的組成部分
pl/sql塊由三個(gè)部分組成:定義部分、執(zhí)行部分、例外處理部分
declare
定義部分,定義常量、變量、游標(biāo)、例外、復(fù)雜數(shù)據(jù)類型
begin
執(zhí)行部分,要執(zhí)行的pl/sql語句和sql語句
exception
例外處理部分,處理運(yùn)行的各種錯(cuò)誤
定義部分是從declare開始的,可選
執(zhí)行部分從begin開始,必選
例外處理部分從exception,可選
下面編寫一條最簡(jiǎn)單的塊,輸出hello world
編寫之前打開系統(tǒng)的屏幕輸出信息,不然看不到效果
SQL> set serveroutput on;
SQL> begin
2 dbms_output.put_line('hello world');
3 end;
4 /
hello world
PL/SQL procedure successfully completed.
最簡(jiǎn)單的塊編程,只有執(zhí)行部分,而且只輸出了一條信息hello world。
相關(guān)說明:dbms_output是oracle所提供的包(類似java的開發(fā)包),該包包含一些過程,put_line就是
dbms_output包的一個(gè)過程(包里面的一個(gè)過程)
實(shí)例2:包含定義部分和執(zhí)行部分
SQL> declare
2 v_name varchar2(20); 改行表示定義的變量,變量名v_name,數(shù)據(jù)類型為varchar2
3 begin
4 select ename into v_name from emp where empno=&empno; &由鍵盤輸出
5 dbms_output.put_line(v_name);
6 end;
7 /
Enter value for empno: 7788
old 4: select ename into v_name from emp where empno=&empno;
new 4: select ename into v_name from emp where empno=7788;
SCOTT 輸出到屏幕的信息v_name
PL/SQL procedure successfully completed.
實(shí)例3:包含定義部分、執(zhí)行部分和例外處理部分
為了避免pl/sql程序的運(yùn)行錯(cuò)誤,提高pl/sql的健壯性,應(yīng)該對(duì)可能的錯(cuò)誤進(jìn)行處理
相關(guān)說明:oracle事先預(yù)定義了一些例外,no_data_found就是找不到數(shù)據(jù)的例外
如上述例子,如果輸入煩人不是emp表中的empno號(hào)碼,那么將會(huì)報(bào)錯(cuò),報(bào)錯(cuò)該如何處理呢,這里就定義例外部分,交給他處理
SQL> declare
2 v_name varchar2(20);
3 v_sal number(7,2);
4 begin
5 select ename,sal into v_name,v_sal from emp where empno=&empno;
6 dbms_output.put_line(v_name||' '||v_sal);
7 exception 定義例外關(guān)鍵字exception
8 when no_data_found then 當(dāng)查詢不到數(shù)據(jù)時(shí),采取措施打印error
9 dbms_output.put_line('error');
10 end;
11 /
Enter value for empno: 78 78并不在emp表中的empno好中
old 5: select ename,sal into v_name,v_sal from emp where empno=&empno;
new 5: select ename,sal into v_name,v_sal from emp where empno=78;
error 打印error
過程
過程用于執(zhí)行特定的操作,當(dāng)建立過程時(shí),既可以指定輸入?yún)?shù)(in),也可以指定輸出參數(shù)(out)。通過在過程中使用輸入?yún)?shù)可以將數(shù)據(jù)傳遞帶執(zhí)行部分;通過使用輸出參數(shù),可以將執(zhí)行部分的數(shù)據(jù)傳遞到應(yīng)用環(huán)境。在sqlplus中使用create procedure 命令來建立過程
SQL> --過程編寫
SQL> create or replace procedure sp_pro1(name varchar2,pass varchar2) is
2 begin
3 insert into names values (name,pass);
4 end;
5 /
Procedure created.
sp_pro1(name varchar2,pass varchar2):這里面的參數(shù)相當(dāng)于編程里面的形參,傳遞的數(shù)據(jù)
然后調(diào)用該存儲(chǔ)過程
SQL> exec sp_pro1('xiaobai','redhat');
PL/SQL procedure successfully completed.
然后查詢數(shù)據(jù)是否已經(jīng)插入了
SQL> select * from names;
NAME PASSWORD
-------------------- ------------------------------
xiaoming redhat
xiaobai redhat
修改表emp的雇員為smith的薪水,編寫存儲(chǔ)過程實(shí)現(xiàn)
SQL> create or replace procedure sp_pro1(name varchar2,v_sal number) is
2 begin
3 update emp set sal=v_sal where ename=name;
4 end;
5 /
Procedure created.
調(diào)用存儲(chǔ)過程,傳遞形參數(shù)據(jù)
SQL> exec sp_pro1('SMITH',1200);
PL/SQL procedure successfully completed.
查詢改變結(jié)果
SQL> select ename,sal from emp where ename='SMITH';
ENAME SAL
---------- ----------
SMITH 1200
過程用于執(zhí)行特定的操作,當(dāng)建立過程時(shí),既可以指定輸入?yún)?shù)(in),也可以指定輸出參數(shù)(out)
sp_pro1(name varchar2,pass varchar2)這里面加入的參數(shù)默認(rèn)是in,如果要輸出有返回值的存儲(chǔ)過程必須加上out,看下面例子
給定一個(gè)empno雇員號(hào),返回雇員名,編寫一個(gè)存儲(chǔ)過程
SQL> create or replace procedure sp_pro1(spno in number,spname out varchar2) is
2 begin
3 select ename into spname from emp where empno=spno;
4 end;
5 /
Procedure created.
該如何調(diào)用了,這里就不能直接exec procedure_name這樣了,調(diào)用方式如下
SQL> declare
2 v_name varchar(20); 定義一個(gè)變量,將存儲(chǔ)過程返回出來的值存入到這個(gè)變量中
3 begin
4 sp_pro1(7788,v_name);
5 dbms_output.put_line(v_name); 打印變量的值,也就是返回出來的值
6 end;
7 /
SCOTT
PL/SQL procedure successfully completed.
什么情況下用exec調(diào)用,什么情況下用PLSQL調(diào)用存儲(chǔ)過程?
exec適合于調(diào)用存儲(chǔ)過程無返回值
plsql適合于調(diào)用存儲(chǔ)過程有返回值,不管多少個(gè)
函數(shù)
過程用于返回特定的數(shù)據(jù),當(dāng)建立函數(shù)時(shí),在函數(shù)頭必須包含return字句,而在函數(shù)體內(nèi)必須包含return語句
返回的數(shù)據(jù),創(chuàng)建函數(shù)用create function
SQL> --函數(shù)案例
結(jié)構(gòu):create or replace function return ..is,看下面例子
SQL> create or replace function sp_fun1(name varchar2) return number is
2 yearsal number(7,2);
3 begin
4 select sal*12 into yearsal from emp where ename=name;
5 return yearsal; 定義需要返回的
6 end;
7 /
Function created.
函數(shù)創(chuàng)建完成,該如何調(diào)用呢?
SQL> declare
2 v_sal number(7,2); 定義一個(gè)變量用來接收函數(shù)返回的值
3 begin
4 v_sal:=sp_fun1('SMITH'); 將函數(shù)返回的值賦值給v_sal,賦值為:=
5 dbms_output.put_line(v_sal);
6 end;
7 /
14400
PL/SQL procedure successfully completed.
網(wǎng)站標(biāo)題:pl/sql編程基礎(chǔ)
網(wǎng)頁URL:http://chinadenli.net/article46/pgjdhg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、企業(yè)建站、網(wǎng)站建設(shè)、Google、企業(yè)網(wǎng)站制作、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)