oracleplsql塊
⑴ Oracle 11g的PLsql部分
·結果集緩存(Result Set Caching)
這一特性能大大提高很多程序的性能。在一些MIS系統或者OLAP系統中,需要使用到很多select count(*)這樣的查詢。在之前,我們如果要提高這樣的查詢的性能,可能需要使用物化視圖或者查詢重寫的技術。在11g,我們就只需要加一個 /*+result_cache*/的提示就可以將結果集緩存住,這樣就能大大提高查詢性能。當然,在這種情況下,我們可能還要關心另外一個問題:完整性。因為在oracle中是通過一致性讀來保證數據的完整性的。而顯然,在這種新特性下,為提高性能,是從緩存中的結果集中讀取數據,而不會從回滾段中讀取數據的。關於這個問題,答案是完全能保證完整性。因為結果集是被獨立緩存的,在查詢期間,任何其他DML語句都不會影響結果集中的內容,因而可以保證數據的完整性。
·對象依賴性改進
在11g之前,如果有函數或者視圖依賴於某張表,一旦這張表發生結構變化,無論是否涉及到函數或視圖所依賴的屬性,都會使函數或視圖變為invalid。在11g中,對這種情況進行了調整:如果表改變的屬性與相關的函數或視圖無關,則相關對象狀態不會發生變化。
·正則表達式的改進
在10g中,引入了正則表達式。這一特性大大方便了開發人員。11g,oracle再次對這一特性進行了改進。其中,增加了一個名為regexp_count的函數。另外,其他的正則表達式函數也得到了改進。
·新SQL語法 =>
我們在調用某一函數時,可以通過=>來為特定的函數參數指定數據。而在11g中,這一語法也同樣可以出現在sql語句中了。例如,你可以寫這樣的語句:
select f(x=>6) from al;
·對TCP包(utl_tcp、utl_smtp…)支持FGAC(Fine Grained Access Control)安全控制
·增加了只讀表(read-only table)
在以前,我們是通過觸發器或者約束來實現對表的只讀控制。11g中不需要這么麻煩了,可以直接指定表為只讀表。
·觸發器執行效率提高了
·內部單元內聯(Intra-Unit inlining)
在C語言中,你可以通過內聯函數(inline)或者宏實現使某些小的、被頻繁調用的函數內聯,編譯後,調用內聯函數的部分會編譯成內聯函數的函數體,因而提高函數效率。在11g的plsql中,也同樣可以實現這樣的內聯函數了。
·設置觸發器順序
可能在一張表上存在多個觸發器。在11g中,你可以指定它們的觸發順序,而不必擔心順序混亂導致數據混亂。
·混合觸發器(compound trigger)
這是11g中新出現的一種觸發器。她可以讓你在同一觸發器中同時具有申明部分、before過程部分、after each row過程部分和after過程部分。
·創建無效觸發器(Disabled Trigger)
11g中,開發人員可以可以閑創建一個invalid觸發器,需要時再編譯她。
·在非DML語句中使用序列(sequence)
在之前版本,如果要將sequence的值賦給變數,需要通過類似以下語句實現:
select seq_x.next_val into v_x from al;
在11g中,不需要這么麻煩了,下面語句就可以實現:
v_x := seq_x.next_val;
·PLSQL_Warning
11g中。可以通過設置PLSQL_Warning=enable all,如果在when others沒有錯誤爆出就發警告信息。
·PLSQL的可繼承性
可以在oracle對象類型中通過super(和java中類似)關鍵字來實現繼承性。
·編譯速度提高
因為不再使用外部C編譯器了,因此編譯速度提高了。
·改進了DBMS_SQL包
其中的改進之一就是DBMS_SQL可以接收大於32k的CLOB了。另外還能支持用戶自定義類型和bulk操作。
·增加了continue關鍵字
在PLSQL的循環語句中可以使用continue關鍵字了(功能和其他高級語言中的continue關鍵字相同)。
·新的PLSQL數據類型——simple_integer
這是一個比pls_integer效率更高的整數數據類型。
⑵ oracle的plsql塊,存儲過程,函數怎麼寫增刪改查
首先在PL/SQL的左側資源欄中展開Proceres項(圖中位置1),然後再其上面的搜索框中(圖中位置2)輸入存過名稱的關鍵詞,按回車鍵搜索要調試的存過,不停的回車,直到找到想要調試的存過。
找到想要調試的存過,左鍵單擊選中該存過(圖中位置1),然後右鍵單擊該存過,從彈出菜單中選擇「Test」項(圖中位置2)。
單擊「Test」後,PL\SQL會打開調試界面,圖中位置1的按鈕就是開始調試的按鈕,在調試之前要填寫存過的參數,位置2就是填寫參數的地方,如果有多個參數,會有多行參數框,按參數名填寫相應的參數即可。
填寫完參數,單擊開始調試按鈕後,調試的界面會發生一些變化。圖中位置1的變化,說明存過已經處於執行狀態,別人不能再編譯或者執行。位置2的按鈕就是執行按鈕,單擊這個按鈕存過會執行完成或者遇到bug跳出,否則是不會停下來的,調試時不會用這個按鈕的。位置3的按鈕才是關鍵——單步執行,就是讓代碼一行一行的執行,位置4的按鈕是跳出單步執行,等待下一個指令。
單擊「單步執行」,存過開始單步執行。界面中每一次執行的代碼會高亮顯示(圖中位置1),如果想要看某個變數具體的值,就在位置2的地方輸入該變數名,然後變數的值會顯示在位置3的地方。
調試的時候,每一次單步執行的時候要記一下執行代碼的行數,圖中位置3的數字就是當前執行代碼的行數,就是第幾行。如果過程單步執行到某行後,再單步執行的時候,存過就退出,那麼錯誤就在該行的下一行。
代碼執行到24行,在往下執行時,直接轉到exception的地方,也就是異常處理的部分。
這說明我們代碼中的錯誤在24和25行上,我們打開存過,瀏覽到24行和25行附近,發現25行和24行使用了兩個變數,記住那兩個變數。重新開始調試過程。
單步的執行時候把剛才那兩個變數名填寫到變數查看框,一邊觀察變數值變化,一邊單步執行,執行到24行的時候,發現一個變數已經有值了,而另一個變數的值為null。錯誤原因明朗了吧?就是變數沒有賦值或者初始話,給該變數賦值後存過就不報錯了。
⑶ 怎麼用ORACLE PLSQL匿名塊調用存儲過程
begin
core_acct_compare(參數1,參數2,參數3,參數4);
end;
begin ... end; 就是所謂的匿名塊
⑷ oracle中plsql與sqlplus的區別是什麼啊它們分別用來做什麼啊
PLSQL是第三方公司為ORACLE使用人員開發的一個UI程序,好用,可以對ORACLE的性能和一些特性的東西提供了解決方案。SQLPLUS是ORACLE公司的隨機安裝產品,不太好用
⑸ oracle和plsql是什麼關系
oracle和plsql是資料庫服務系統與第三方的針對它設計的實用操作與維護軟體。
存在原因:ORACLE是甲骨文軟體公司設計編寫的,它自帶的一些操作組件並不是很友好,所以有一些組織針對它開發編寫了一些實用操控軟體,作為它的一些外圍的輔組應用。
相關備註:PL/SQL 全稱PL/SQL Developer,是Allround Automations公司開發,專門面向Oracle資料庫存儲程序單元的。非常多的ORACLE的布設、使用、學習人員會在Oracle的使用中用上它。
⑹ 執行一個Oracle PLSQL塊,直接報ORA-24337: statement handle not prepared
ORA-24337表面上的意思是pl/sql塊中的寫法有問題,但如果在其他機器上執行沒有問題,而在你這里有問題,因此可以判斷pl/sql塊本身的寫法沒有錯誤,問題估計出在你的機器上。
所以建議你按如下方向排查:
1.你使用的oracle用戶是否與其他人一致,如果不一致,檢查你的許可權是否足夠
2.如果Oracle用戶一致,檢查你機器的環境變數設置
查過這兩點,估計問題就能解決。
⑺ oracle 存儲過程執行速度與plsql塊執行速度 疑問
oracle 存儲過程執行速度與plsql塊執行速度
你表的結果那些,還有那個欄位上有沒有索引,等等,都不知道,你這樣貼個圖出來,沒有哪個曉得是什麼原因
⑻ 在PlSQL中oracle匿名塊怎麼返回結果集
oracle里輸出不是print,這個和其他有點不同
給你一個,你直接運行就好
declare
i int;
j int;
begin
j:=10;
i:=1;
while i<j
loop
dbms_output.put_line(rpad(chr(32),10-i,chr(32))||rpad('*',i*2-1,'*'));
i:=i+1;
end loop;
end;
oracle 里輸出結果是用dbms_output.put_line這個方式,樓上說的是set serveroutput on是在命令行的操作下執行,用那個顯示輸出
輸出結果集需要用到游標,到時候把游標里的內容也用dbms_output.put_line循環輸出就好,如果是一個結果的話,就直接輸出結果就OK
⑼ oracle 同一個程序塊 在SQL DEVELOPER 裡面運行沒問題,但是在PLSQL developer 裡面就報錯
sqldeveloper沒用過,但是你這樣的程序在plsql上是有錯的。一些格式不同造成的吧。
比如第一行新值delare,plsql中新值這兩個字元肯定是不識別的。
還有end後,plsql中需要用符合/來宣告程序塊結束。
然後再回車就可以執行。