Oracle基礎 預存程序

來源:互聯網
上載者:User

標籤:

一、子程式

  子程式是已命名的PL/SQL塊,它們儲存在資料庫中,可以Wie它們指定參數,可以從任何資料庫用戶端和應用程式中調用它們。子程式包括預存程序和函數。

  子程式包括:

  1、聲明部分:聲明部分包括類型、遊標、常量、變數、異常和嵌套子程式的聲明。這些項都是局部的,在退出後就不複存在。

  2、可執行部分:可執行部分包括賦值、控制執行過程以及操縱ORacle資料的語句。

  3、異常處理部分:  異常處理部分包括例外處理常式,負責處理執行預存程序中出現的異常。

 

  子程式的有點:

  1、模組化:通過子程式,可以將程式分解為可管理的、明確的邏輯模組。

  2、可重用性:子程式在建立並執行後,就可以再任意數目的應用程式中使用。

  3、可維護性:子程式可以簡化維護操作,因為如果一個子程式受到影響,則只需修改該子程式的定義。

  4、安全性:使用者可以設定許可權,使得訪問資料的唯一方式就是通過使用者提供的預存程序和函數。不僅可以讓資料更安全,而且可以保證它的正確性。

 

二、預存程序

  預存程序是執行某些操作的子程式,是執行特定任務的模組。從根本上講,預存程序就是明明的PLSQL塊,它可以被賦予參數,儲存在資料庫中,然後由一個應用程式或其他PLSQL程式調用。

  1、建立預存程序:

  文法:

  CREATE [OR REPLACE] PROCEDURE procedure_name

  [(paraameter_list)]

  {IS/AS}

  [local_declarations]

  BEGIN

    executable_statements;

    [EXCEPTION]

    [exception_handlers]

  END [procedure_name]

  說明:

  procedure_name:為預存程序的名字;

  paraameter_list:參數列表,參數中可以使用in和out表示輸入和輸出參數。可選

  AS表示其他變數聲明,IS表示顯示遊標聲明

  local_declarations:局部聲明,可選

  executable_statements:可執行語句

  exception_handlers:異常處理語句,可選

  OR REPLACE:可選。如果不包含,建立預存程序如果存在會報錯,包含存在會替換。

  例:添加員工資訊  

--添加員工資訊create or replace procedure add_emp(eno number,ename varchar2,job varchar2,mgr NUMBER,salary number,hiredate DATE,com NUMBER,dno number) isBEGIN  dbms_output.put_line(‘添加員工資訊‘);  INSERT INTO emp VALUES(eno,ename,job,mgr,hiredate,salary,com,dno);  EXCEPTION     WHEN OTHERS THEN      dbms_output.put_line(‘添加員工失敗‘);end add_emp;

  注意:

  預存程序中只宣告類型,不指定長度。

  AS後的變數聲明以;結束。

  

  2、調用預存程序:  

  文法:

  exec[ute] procedure_name (parameters_list);

  說明:

  execute:執行命令,可以縮寫為exec。

  procedure_name:預存程序的名稱。

  parameters_list:預存程序的參數列表。c

  

  調用預存程序有兩種方式,命令列方式和PL/SQL方式。

  1)命令列方式:開啟命令列直接輸入預存程序名稱進行調用。  

EXEC ADD_EMP(8888,‘zhangsan‘,‘clerk‘,7902,2000,SYSDATE,500,30);

 

  2)PLSQL方式:必須在pl/sql塊中調用預存程序,不使用EXEC關鍵字,直接預存程序名稱即可。

BEGIN    --PL/SQL方式,不需要使用exec    add_emp(8989,‘LISI‘,‘clerk‘,7902,1000,SYSDATE,NULL,30);END;

 

  參數的傳遞方式:

  1)按位置傳遞:

  按照參數的書序,依次寫入參數內容。調用的參數順序和定義的參數順序必須一一對應。  

EXEC ADD_EMP(8888,‘zhangsan‘,‘clerk‘,7902,2000,SYSDATE,500,30);

 

  2)按名稱傳遞:

  按名稱調用時按名稱對應,名稱對應的關係最重要,次序不重要。  

EXEC add_emp(ENO => 8989,ENAME => ‘LISI‘,JOB => ‘clerk‘,MGR => 7902,SALARY => 1000,HIREDATE => SYSDATE,COM => NULL,DNO => 30);

  

  3)混合方式傳遞:

  同時使用位置傳遞和參數傳遞,採用這種方式必須將位置參數放在名稱參數的前面,只要第一個採用了名稱傳遞法,湖面所有的參數必須使用名稱傳遞法。  

EXEC add_emp(8989,‘LISI‘,JOB => ‘clerk‘,MGR => 7902,SALARY => 1000,HIREDATE => SYSDATE,COM => NULL,DNO => 30);

 

  

  3、預存程序的參數模式:

  預存程序參數有三種模式:IN、OUT和IN OUT,即輸入、輸出、輸入/輸出。

  定義預存程序參數文法:

  parameter_name [IN|OUT|IN OUT] dateType [{:= | default} expression]

  注意:

  1)參數IN模式是預設模式。如果未指定參數模式,則預設為IN。對於OUT和IN OUT參數,必須明確指定。

  2)可以再參數列表中為IN參數指定預設值,OUT和IN OUT不可用。

  帶OUT參數的預存程序:

  例:根據empno查詢員工資訊返回。  

CREATE OR REPLACE PROCEDURE QUERY_EMP(  V_EMPNO IN EMP.EMPNO%TYPE,       --輸入參數  V_ENAME OUT EMP.ENAME%TYPE,      --輸出參數  V_SAL   OUT EMP.SAL%TYPE) IS     --輸出參數BEGIN  SELECT ename,sal INTO v_ename,v_sal FROM emp  WHERE empno = v_empno;  dbms_output.put_line(‘資料已查到‘);END QUERY_EMP;

  調用帶輸出參數的預存程序,首先定義兩個變數儲存輸出參數返回的內容。  

DECLARE   v_name emp.ename%TYPE;  v_sal emp.sal%TYPE;BEGIN  query_emp(7788,v_name,v_sal);  dbms_output.put_line(‘name:‘||v_name||‘  sal:‘||v_sal);END;

 

  帶IN OUT參數的預存程序:

  資料交換;

CREATE OR REPLACE PROCEDURE swap(  v_num1 IN OUT NUMBER,  v_num2 IN OUT NUMBER)AS  v_temp NUMBER;BEGIN  v_temp := v_num1;  v_num1 := v_num2;  v_num2 := v_temp;END;
--調用DECLARE  v_n1 NUMBER := 10;  v_n2 NUMBER := 20;BEGIN  swap(v_n1,v_n2);  dbms_output.put_line(v_n1||‘    ‘||v_n2);END;

 

   4、預存程序的存取權限

  預存程序建立後,只有建立該預存程序的使用者和管理員才能有權執行。其他使用者如果要調用該預存程序,需要得到預存程序的EXECUTE許可權。

  例:

--將swap的執行許可權授予user1GRANT EXECUTE ON swap TO user1;   --將swap的執行許可權授予user1,並且user1可以對其他使用者進行授權。GRANT EXECUTE ON swap TO user1 WITH GRANT OPTION;  --撤銷user1使用者的執行swap許可權。REVOKE EXECUTE ON swap FROM user1   

 

  5、刪除預存程序  

DROP procedure swap;

 

  

  

Oracle基礎 預存程序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.