PL SQL中的程式設計總結

2021-04-12 14:56:49 字數 4368 閱讀 9588

1、當需要向表中裝大量的資料流或者需要理大量的資料流的候,能否使用管道提高理效率?

管道函式

對於改善並行

查詢的效能非常方便,它加快往表中加

載資料的速度。管道函式的使用

總結如下兩點:每當在

查詢裡使用

pl/sql函式時

,該查詢

將被序列化,即乙個

處理器只能執行乙個

查詢例項,那麼在

這種情況下不可能使用並行

查詢(比如在資料

倉庫中要

經常使用這項技

術)。因此,

為了使用並行

查詢就必

須使用管道函式,

這樣也就加快了

執行的速度。

管道函式的

輸入引數必

須是乙個引用記錄集

型別(即

ref cursor

),而返回的是巢狀表

型別(其表中每一行

對應每乙個引用

記錄)。在使用管道函式之前,必

須先在程式頭寫上

parallel_enable,這樣

才能在查詢語

句中使用管道函式來

處理了。

2如何使pl/sql程式等待一段時間執行?

方法就是使用

dbms_lock

包的sleep

函式,可以

進行精確定時,其

語法為:

dbms_lock.sleep (seconds in number);

3.需要在一表插入一條記錄之後等若干秒後再行另外乙個操作,如何在pl/sql程式裡行定操作?

一般的做法是用迴圈作延

遲,利用

dbms_utility

的gettime

函式來檢測

當前的時間

,程式代

碼如下:

declare

v_delaytime constant integer := 100;

v_starttime integer ;

v_endtime integer ;

begin

v_starttime := dbms_utility.get_time;

v_endtime := dbms_utility.get_time;

while abs(v_endtime- v_starttime)< v_delaytime loop

/*空迴圈或者

簡單的耗時執行

語句*/end loop;

end;

/另外如果是不同會話(

session)之間

的定時,就必須

使用dbms_pipe

包的函式來實現會

話間的訊息傳遞。

4.當pl/sql返回乙個資料集的候,使用集合是遊

一般情況下,有以下兩點作

為依據:

1) 如果

pl/sql

程式返回多多行資料

給另外乙個

pl/sql

程式的話,這

裡就建議

使用集合,因

為這樣可以利用集合的批收集(

bulk collection

)來提高從資料

庫提取資料的速度。

2) 如果需要在

pl/sql

程式的環

境中把資料返回到宿主語言

環境中(如

sql*plus,c,delphi

等),這時應該

使用游標變

量來返回

這些資料,因

為幾乎所有的宿主

語言都支援遊

標變數,但不是所有的宿主

語言都支援集合。

這樣可以增

強程式的可移植性。

5.如何更有效的在pl/sql中使用遊游標

是pl/sql

中乙個非常重要的概念,對資料

庫的檢索主要依靠遊

標來操作。在

pl/sql

中有兩類游標

,一類是隱

式游標,如select clno into v_clno from table_detail.

另外一類是顯

式游標,如cursor v_cur is select clno from table_detail。對

於游標的使用這裡給

出以下幾點建議:

1) 盡可能的使用

bulk collection

。它能夠較

大的提高執行效能,在

oracl9i

的第二版,甚至可以使用

bulk collection

來直接將資料寫入到記錄表

2) 盡量使用顯式遊

標來處理,因為相

對於隱式遊

標來說,

顯式游標的速度更快一些。

3) 如果

查詢的表很小或者是靜

態的,可以把該錶

快取到乙個包

級的集合裡。

這樣,你的

查詢函式就直接從集合裡(即

程序全域性區,

pga cache

),而不是從系

統全域性區(

sga)來取資料,這樣的

處理速度會提公升很多。

6.除表的注意事在刪

除乙個表中的全部資料時,

須使用truncate table 表名;

因為用drop table

,delete * from 表名時

,tablespace

表空間該

表的占用空間並未

釋放,反覆幾次

drop

,delete

操作後,

該tablespace

上百兆的空

間就被耗光了。

7.外部"+"的用法外部聯

接"+"

按其在"="的左邊

或右邊分左聯

接和右聯接.

若不帶"+"運算子的表中的乙個行不直接匹配於

帶"+"

預算符的表中的任何行,則

前者的行與後者中的乙個空行相匹配並被返回

.若二者均不

帶』+』,

則二者中無法匹配的均被返回

.利用外部聯接

"+",

可以替代效率十分低下的

not in 運算,

大大提高執行速度.例如

,下面這條命令執行起

來很慢  用外聯

接提高表連線的

查詢速度  

PL SQL中關於for的使用總結

從兩段 中分析出兩個使用總結 第一種形式 declare v max id number begin 將表中主鍵的最大值找出賦給v max id select max deptno into v max id from dept 對資料表進行操作 insert into dept values v ...

oracle中pl sql程式設計 三

oracle中pl sql程式設計 三 pl sql的控制結構 提供了三種條件的分支語句 a if then b if then else c if then elsif 注意這裡不是elseif else 簡單的條件判斷 if then 案例 編寫乙個過程,可以輸入乙個雇員名,如果該雇員的工資 低...

PLSQL程式設計

create table emomy1 emon varchar2 100 time1 date drop table emomy1 select from emomy1 begin dbms output.put line hello,world end 定義變數 declare name con...