婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Oracle中命名塊之存儲過程的詳解及使用方法

Oracle中命名塊之存儲過程的詳解及使用方法

熱門標簽:區域地圖標注怎么設置 南通電銷外呼系統哪家強 百度地圖標注飯店位置怎么 百度地圖標注注解 上海網絡外呼系統 外呼系統好點子 理財產品電銷機器人 地圖標注的坐標點 電話機器人那種好

一、匿名塊和命名塊

◆PL/SQL塊分為良好總:命名塊和匿名塊。

◆匿名塊:以declare或begin開始,每次執行匿名塊都要通過客戶端工具將其發送給Oracle,經過語法分析、編譯然后執行。

◆命名塊:具有名稱的PL/SQL塊,這些命名塊被存儲在Oracle中,編譯一次,以后只可調用就可多次執行。如:存儲過程、存儲函數、包、觸發器等、

  存儲過程:無返回值;
  存儲函數:有返回值;
  包:可容納多個過程或函數的一個容器(較好管理這些過程和函數,類似于java中的包);
  觸發器:在合適的實際被自動執行。(無需調用,在滿足要求的情況下,自動執行;觸發器也被稱為隱式執行的命名塊!)

◆匿名塊和命名塊的區別:

  匿名塊:能夠動態地創建和執行過程代碼的PL/SQL結構,每次執行匿名塊時就會自動的將該塊數據通過文本的形式發送給Oracle,然后執行,反饋給用戶,每次執行都需發送和編譯!
  命名塊:持久化的方式將代碼作為數據庫屬性儲存在系統目錄中,在Oracle中編譯一次,下次若使用可直接調用執行,無需再次編譯,非常高效。

二、存儲過程:

存儲過程是具有名稱、完整特定功能和無返回值的PL/SQL塊,只需發送調用命令即可執行該過程,能夠實現代碼的重用,不能在SQL語句當中調用!

◆創建存儲過程:

格式:create[or replace] procedure proc_name
     [(para1[int|out|in out]type,...)]
     {is|AS}
     prdc_body
 

  proc_name表示存儲過程名;
  para1表示參數名;type是參數para1的數據類型;
  proc_body表示過程體.過程體是遵循PL/SQL塊的結構,但不能使用declare關鍵字,end后面可帶有過程名。 

注意:參數列表是可選的

◆調用存儲過程:(存儲過程創建的時候會自動的保存在Oracle中,在執行儲存過程的時候,PL/SQL塊只需調用即可!)

  (1)如果在PL/SQL塊中調用,直接使用proc_name(...);
  (2)如果使用sql plus環境中,需要使用 EXEC proc_name(...)的形式;
  (3)如果存儲過程無參數,這調用時可帶有圓括號也可不帶! 

【示例】創建一個無參數的存儲過程(顯示所有員工的信息)

create or replace procedure pr_show_employee 
is
--進入塊的聲明部分(無需編寫declare關鍵字)
   --定義游標
   cursor v_emp_cursor is select * from employees;
   --定義游標類型的記錄型行變量
   v_emp_record v_emp_cursor%rowtype;
begin
   for v_emp_record in v_emp_cursor loop
     dbms_output.put_line(v_emp_record.employee_id||','||v_emp_record.first_name||','||
               v_emp_record.last_name||','||v_emp_record.salary);
   end loop;
end pr_show_employee ;

--調用存儲過程(在一個匿名塊中執行)

begin
   pr_show_employee();
end; 

【示例】存儲過程的參數接受產品類別編號,輸出該類所有產品的信息

create or replace procedure pr_show_product(
product_type products.product_type_id%type)
as
 --定義游標
 cursor v_prd_cursor is select * from products p where product_type = p.product_type_id;
 --定義游標的行類型變量
 v_prd_record v_prd_cursor%rowtype;
begin
   for v_prd_record in v_prd_cursor loop
  dbms_output.put_line(v_prd_record.product_id||','||v_prd_record||','||product_type_id||','||v_prd_record.description||','
||v_prd_record.
name||','||v_prd_record.price);
   end loop;
end pr_show_product;


--調用存儲過程(執行)
declare
    --定義編號變量的類型
    v_prd_type_id products.product_type_id%type := 1;
begin
   pr_show_product(v_prd_type_id);
end; 

◆參數的傳遞模式:

  參數傳遞有三種模式:in、out、in out
  in:過程調用時,實參的值會傳遞給形參。形參被看作是常量,在過程內部不能被修改。
  out:過程調用時,實參的值被忽略,形參為null值,在過程內部形參變量可以讀寫。過程結束時,形參的值賦值給實參!
  in out:過程調用時,實參的值傳遞給形參,在過程內部形參變量可讀可寫,過程結束時,形參的值賦值給實參。 

注意:如果在定義存儲過程時,沒有指明參數傳遞模式,則默認為 in 模式

【示例】創建一個有參數傳遞默認的存儲過程

create or replace procedure pr_test(p_1 in out varchar2)
is 


begin
   dbms_output.put_line('p_1='||p_1);
   p_1 := 'abc'; 
   dbms_output.put_line('p_1='||p_1);
end pr_test;


--調用存儲過程

declare
  v_1 varchar2(5) := 'wwww';
begin
  pr_test(v_1); 
  dbms_output.put_line('v_1='||v_1);
end;

注意:(1)在創建存儲過程時,形參類型不能指定具體的長度,字符類型就為 varchar2,數字類型就是number;默認和實參類型的長度等同

     (2)使用 in 模式,形參接受實參的值,默認形參為常量,在存儲過程當中不能被修改,否則出錯!
     (3)使用 out 模式,實參的值被忽略,但必須是變量,用來接收存儲過程執行完形參的值;而形參是可讀可寫的。
     (4)使用 in out 模式,實參的值傳遞給形參,也必須是變量,形參可讀可寫,最后執行完存儲過程形參的值傳遞給實參!
     (5)參數傳遞,實參的值和長度或精度約束會傳遞給形參,因此,形參不能有長度或精度的約束。在過程中給形參賦值時,要注意它的長度或精度的限制!

感謝 閱讀,希望能幫助到大家,謝謝大家對本站的支持!

您可能感興趣的文章:
  • ORACLE 10g 安裝教程[圖文]
  • Oracle數據庫下載及安裝圖文操作步驟
  • Oracle存儲過程基本語法介紹
  • oracle常用sql語句
  • oracle 創建表空間詳細介紹
  • ORACLE常用數值函數、轉換函數、字符串函數
  • oracle數據庫tns配置方法詳解

標簽:遼源 寧波 紹興 海東 百色 昭通 自貢 中衛

巨人網絡通訊聲明:本文標題《Oracle中命名塊之存儲過程的詳解及使用方法》,本文關鍵詞  Oracle,中,命名,塊之,存儲,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Oracle中命名塊之存儲過程的詳解及使用方法》相關的同類信息!
  • 本頁收集關于Oracle中命名塊之存儲過程的詳解及使用方法的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 左云县| 甘洛县| 建瓯市| 武安市| 皋兰县| 舟山市| 文安县| 宜黄县| 同仁县| 达州市| 张掖市| 铜鼓县| 伊金霍洛旗| 恩施市| 广安市| 开江县| 隆安县| 遂川县| 织金县| 毕节市| 四平市| 新乐市| 张北县| 翼城县| 顺义区| 玉环县| 伊宁市| 临澧县| 天全县| 赤壁市| 邢台市| 上饶市| 蛟河市| 江达县| 公安县| 汉中市| 夏津县| 昌宁县| 武山县| 东阳市| 陆河县|