數據程序設計5 存儲概述

目錄

子程序

存儲過程

過程

創建過程

過程的參數

參數傳遞方法

子程序

命名的PL/SQL塊,能夠接受傳遞的參數,能夠被調用。

子程序的類型:

  • 過程:用於執行某項操作
  • 函數:用於執行某項操作並返回值

基於標準的PL/ SQL塊結構

  • 聲明部分
  • 可執行部分
  • 異常部分(可選)

存儲過程

  • 命名的PL/SQL塊
  • 能夠接受參數
  • 能夠被重複調用
  • 用於執行某項操作
  • 存儲在數據庫中

過程

創建過程

語法:

CREATE [OR REPLACE] PROCEDURE procedure name
[(parameter1 [mode1] datatype1,
parameter2 [mode2] datatype2,
...)]
IS|AS
PL/ SQL Block;

參數:和外界打交道的

mode模式有三種:輸入,輸出,既能輸入又能輸出(可省略,默認爲輸入的)

數據類型

過程的參數

IN參數

例子:

CREATE OR REPLACE PROCEDURE raise_ salary
    (p_ jid    IN emp. empno%TYPE)
IS
BEGIN
    UPDATE emp
    SET sal = sal* 1.10
    WHERE empno= P_ jid;
END raise_ salary;

OUT參數

CREATE OR REPLACE PROCEDURE raise_ sal
    (p_ id    IN emp.empno%type,
    P_ name    OUT varchar2,
    p_ _sal    OUT number)
IS
BEGIN
    SELECT sal,ename
    INTO p_ sal,p_ name
    FROM emp
    WHERE empno= p_ _id; 
END raise_ _sal; 

在調用的時候

DECLARE
    V_ sal    emp.sal%type;
    V_ name    emp.ename%type; 
BEGIN
    raise_ sal(7369, V_ name, V_ sal);
    dbms_ output. put line('僱員:'||v_ name || '的薪水是'||v_ sal);
END;

這樣在參數中可以接收返回的值。 

IN OUT參數

CREATE OR REPLACE PROCEDURE raise sal
    (p_ id IN    emp. empno%type,
    P_ name OUT    varchar2,
    p_ sal IN OUT number)
IS
BEGIN
    UPDATE emp
    SET sal=sal+p__sal
    WHERE empno=p_ id; 
    SELECT sal,ename into p_ sal,p_ name
    FROM emp
    WHERE empno= p_ id;
END raise_ sal;

調用示例

DECLARE 
    V_ sal    emp.sal%type := 500;
    V_ name emp.ename%type;
BEGIN
    raise_ sal(7369, V_ name, V_ sal);
    dbms_ output.put_ line('僱員:'||v_ name||'的薪水是'||v_ sal);
END;

既然能輸入能輸出,就應該傳一個已經初始化的變量。

參數傳遞方法

三種參數傳遞方法:

  • 位置:實際參數與形式參數排列的順序相同
  • 指定:實際參數聯合其相應的形式參數以任意順序排列
  • 組合:實際參數的排列- -些用位置,一些用指定

位置法:實參與形參順序相同,順序不同會報錯

指定法:形參名字=>實參名字

get_ annual income(P_ empho=>7369,P_ ann_ sal=>v_ ann_ sal)

這樣就可以不考慮順序了

組合法是兩種的綜合

get_ annual_ income(P_ empno=>7369,V_ ann sal);//錯誤
get_ annual_ income(V_ ann sal,P_ empno=>7369) ;//正確

前面有按照名字的位置就已經不準確了,所以要先按照位置再按照名字

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章