濮阳杆衣贸易有限公司

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

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

熱門標(biāo)簽:區(qū)域地圖標(biāo)注怎么設(shè)置 南通電銷外呼系統(tǒng)哪家強(qiáng) 百度地圖標(biāo)注飯店位置怎么 百度地圖標(biāo)注注解 上海網(wǎng)絡(luò)外呼系統(tǒng) 外呼系統(tǒng)好點(diǎn)子 理財(cái)產(chǎn)品電銷機(jī)器人 地圖標(biāo)注的坐標(biāo)點(diǎn) 電話機(jī)器人那種好

一、匿名塊和命名塊

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

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

◆命名塊:具有名稱的PL/SQL塊,這些命名塊被存儲(chǔ)在Oracle中,編譯一次,以后只可調(diào)用就可多次執(zhí)行。如:存儲(chǔ)過程、存儲(chǔ)函數(shù)、包、觸發(fā)器等、

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

◆匿名塊和命名塊的區(qū)別:

  匿名塊:能夠動(dòng)態(tài)地創(chuàng)建和執(zhí)行過程代碼的PL/SQL結(jié)構(gòu),每次執(zhí)行匿名塊時(shí)就會(huì)自動(dòng)的將該塊數(shù)據(jù)通過文本的形式發(fā)送給Oracle,然后執(zhí)行,反饋給用戶,每次執(zhí)行都需發(fā)送和編譯!
  命名塊:持久化的方式將代碼作為數(shù)據(jù)庫屬性儲(chǔ)存在系統(tǒng)目錄中,在Oracle中編譯一次,下次若使用可直接調(diào)用執(zhí)行,無需再次編譯,非常高效。

二、存儲(chǔ)過程:

存儲(chǔ)過程是具有名稱、完整特定功能和無返回值的PL/SQL塊,只需發(fā)送調(diào)用命令即可執(zhí)行該過程,能夠?qū)崿F(xiàn)代碼的重用,不能在SQL語句當(dāng)中調(diào)用!

◆創(chuàng)建存儲(chǔ)過程:

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

  proc_name表示存儲(chǔ)過程名;
  para1表示參數(shù)名;type是參數(shù)para1的數(shù)據(jù)類型;
  proc_body表示過程體.過程體是遵循PL/SQL塊的結(jié)構(gòu),但不能使用declare關(guān)鍵字,end后面可帶有過程名。 

注意:參數(shù)列表是可選的

◆調(diào)用存儲(chǔ)過程:(存儲(chǔ)過程創(chuàng)建的時(shí)候會(huì)自動(dòng)的保存在Oracle中,在執(zhí)行儲(chǔ)存過程的時(shí)候,PL/SQL塊只需調(diào)用即可!)

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

【示例】創(chuàng)建一個(gè)無參數(shù)的存儲(chǔ)過程(顯示所有員工的信息)

create or replace procedure pr_show_employee 
is
--進(jìn)入塊的聲明部分(無需編寫declare關(guān)鍵字)
   --定義游標(biāo)
   cursor v_emp_cursor is select * from employees;
   --定義游標(biāo)類型的記錄型行變量
   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 ;

--調(diào)用存儲(chǔ)過程(在一個(gè)匿名塊中執(zhí)行)

begin
   pr_show_employee();
end; 

【示例】存儲(chǔ)過程的參數(shù)接受產(chǎn)品類別編號(hào),輸出該類所有產(chǎn)品的信息

create or replace procedure pr_show_product(
product_type products.product_type_id%type)
as
 --定義游標(biāo)
 cursor v_prd_cursor is select * from products p where product_type = p.product_type_id;
 --定義游標(biāo)的行類型變量
 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;


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

◆參數(shù)的傳遞模式:

  參數(shù)傳遞有三種模式:in、out、in out
  in:過程調(diào)用時(shí),實(shí)參的值會(huì)傳遞給形參。形參被看作是常量,在過程內(nèi)部不能被修改。
  out:過程調(diào)用時(shí),實(shí)參的值被忽略,形參為null值,在過程內(nèi)部形參變量可以讀寫。過程結(jié)束時(shí),形參的值賦值給實(shí)參!
  in out:過程調(diào)用時(shí),實(shí)參的值傳遞給形參,在過程內(nèi)部形參變量可讀可寫,過程結(jié)束時(shí),形參的值賦值給實(shí)參。 

注意:如果在定義存儲(chǔ)過程時(shí),沒有指明參數(shù)傳遞模式,則默認(rèn)為 in 模式

【示例】創(chuàng)建一個(gè)有參數(shù)傳遞默認(rèn)的存儲(chǔ)過程

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;


--調(diào)用存儲(chǔ)過程

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

注意:(1)在創(chuàng)建存儲(chǔ)過程時(shí),形參類型不能指定具體的長度,字符類型就為 varchar2,數(shù)字類型就是number;默認(rèn)和實(shí)參類型的長度等同

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

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

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

標(biāo)簽:遼源 寧波 紹興 海東 百色 昭通 自貢 中衛(wèi)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle中命名塊之存儲(chǔ)過程的詳解及使用方法》,本文關(guān)鍵詞  Oracle,中,命名,塊之,存儲(chǔ),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Oracle中命名塊之存儲(chǔ)過程的詳解及使用方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于Oracle中命名塊之存儲(chǔ)過程的詳解及使用方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    库车县| 竹溪县| 包头市| 佛冈县| 普宁市| 惠东县| 萨迦县| 手游| 夹江县| 左贡县| 柞水县| 江孜县| 武强县| 织金县| 怀仁县| 新田县| 连南| 鄢陵县| 涞水县| 九江县| 什邡市| 沁源县| 慈溪市| 永康市| 洪江市| 织金县| 凤冈县| 平凉市| 烟台市| 宁阳县| 赣州市| 和龙市| 阿拉善右旗| 富源县| 遵义县| 武陟县| 疏勒县| 集安市| 如皋市| 涟源市| 英德市|