最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Oracle中 關(guān)于數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)的使用

 更新時(shí)間:2013年04月15日 12:13:11   作者:  
本篇文章,小編將為大家介紹,在Oracle中 關(guān)于數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)的使用,有需要的朋友可以參考一下
存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)指存儲(chǔ)在數(shù)據(jù)庫(kù)中供所有用戶程序調(diào)用的子程序叫存儲(chǔ)過(guò)程、存儲(chǔ)函數(shù)。
存儲(chǔ)過(guò)程沒(méi)有返回值。存儲(chǔ)函數(shù)有返回值

  創(chuàng)建存儲(chǔ)過(guò)程
      用CREATE PROCEDURE命令建立存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)。

      語(yǔ)法:
create [or replace] PROCEDURE過(guò)程名(參數(shù)列表)
AS
        PLSQL子程序體;

  存儲(chǔ)過(guò)程示例:為指定的職工在原工資的基礎(chǔ)上長(zhǎng)10%的工資
 
/*
為指定的職工在原工資的基礎(chǔ)上長(zhǎng)10%的工資,并打印工資前和工資后的工資
*/
SQL> create or replace procedure raiseSalary(empid in number)
    as
    pSal emp.sal%type;--保存員工當(dāng)前 工資
    begin
--查詢?cè)搯T工的工資
    select sal into pSal from emp where empno=empid;
--給該員工漲工資
    update emp set sal = sal*1.1 where empno=empid;
--打印漲工資前后的工資
    dbms_output.put_line('員工號(hào):' || empid || '漲工資前
   ' || psal || '漲工資后' || psal*1.1);
    end;
 1  /

Procedure created
--存儲(chǔ)過(guò)程調(diào)用
--方法一
SQL> set serveroutput on
SQL> exec raisesalary(7369);

員工號(hào):7369漲工資前
800漲工資后880

方法二
    set serveroutput on
begin
 raisesalary(7369);
end;
/

PL/SQL procedure successfully completed

 
      存儲(chǔ)函數(shù)
      函數(shù)(Function)為一命名的存儲(chǔ)程序,可帶參數(shù),并返回一計(jì)算值。函數(shù)和過(guò)程的結(jié)構(gòu)類似,但必須有一個(gè)RETURN子句,用于返回函數(shù)值。函數(shù)說(shuō)明要指定函數(shù)名、結(jié)果值的類型,以及參數(shù)類型等。

     建立存儲(chǔ)函數(shù)的語(yǔ)法:

CREATE [OR REPLACE] FUNCTION函數(shù)名(參數(shù)列表)
RETURN 函數(shù)值類型
AS
PLSQL子程序體;

 
示例:查詢某職工的年收入。
SQL> /**/
    /*
    查詢某職工的總收入
    */
    create or replace function queryEmpSalary(empid in number)
    return number
   as
    pSal number; --定義變量保存員工的工資
    pComm number; --定義變量保存員工的獎(jiǎng)金
   begin
   select sal,comm into psal,pcomm from emp where empno = empid;
   return psal*12+nvl(pcomm,0);
   end;
   /

Function created

   l   函數(shù)的調(diào)用

SQL> declare
    v_sal number;
    begin
    v_sal:=queryEmpSalary(7934);
    dbms_output.put_line('salary is:'|| v_sal);
    end;
    /

salary is:15600

PL/SQL procedure successfully completed

SQL> begin
    dbms_output.put_line('salary is:'|| queryEmpSalary(7934));
    end;
    /

salary is:15600

PL/SQL procedure successfully completed

 
       觸發(fā)器
       數(shù)據(jù)庫(kù)觸發(fā)器是一個(gè)與表相關(guān)聯(lián)的、存儲(chǔ)的PL/SQL程序。每當(dāng)一個(gè)特定的數(shù)據(jù)操作語(yǔ)句(Insert,update,delete)在指定的表上發(fā)出時(shí),Oracle自動(dòng)地執(zhí)行觸發(fā)器中定義的語(yǔ)句序列。

       觸發(fā)器的類型
         語(yǔ)句級(jí)觸發(fā)器
        在指定的操作語(yǔ)句操作之前或之后執(zhí)行一次,不管這條語(yǔ)句影響了多少行。

         行級(jí)觸發(fā)器(FOR EACH ROW)
        觸發(fā)語(yǔ)句作用的每一條記錄都被觸發(fā)。在行級(jí)觸發(fā)器中使用old和new偽記錄變量,識(shí)別值的狀態(tài)。

      創(chuàng)建觸發(fā)器
CREATE  [or REPLACE] TRIGGER 觸發(fā)器名
   {BEFORE | AFTER}
   {DELETE | INSERT | UPDATE [OF列名]}
   ON  表名
   [FOR EACH ROW [WHEN(條件) ] ]
   PLSQL 塊

       示例1:限制非工作時(shí)間向數(shù)據(jù)庫(kù)插入數(shù)據(jù)
SQL> create or replace
    trigger securityEmp
    before insert on emp
    declare
    begin
    if to_char(sysdate,'day')in('星期四','星期六','星期日')
    or to_number(to_char(sysdate,'hh24'))not between 8 and 18 then
    raise_application_error(-20001,'不能在非工作時(shí)間插入數(shù)據(jù)。');
    end if;
   end;
   /

Trigger created

觸發(fā)語(yǔ)句與偽記錄變量的值

觸發(fā)語(yǔ)句

:old

:new

Insert

所有字段都是空(null)

將要插入的數(shù)據(jù)

Update

更新以前該行的值

更新后的值

delete

刪除以前該行的值

所有字段都是空(null)

示例2:確認(rèn)數(shù)據(jù)(檢查emp表中sal的修改值不低于原值)
SQL> create or replace trigger checkSal
    before update of sal on emp
    for each row
    declare
    begin
    if :new.sal<:old.sal then
    raise_application_error(-20001,'更新后的薪水比更新前小');
    end if;
    end;
   /

Trigger created
運(yùn)行后結(jié)果:
SQL> update emp set sal=260 where empno=7499;

update emp set sal=260 where empno=7499

ORA-20001: 更新后的薪水比更新前小
ORA-06512: 在 "SCOTT.CHECKSAL", line 4
ORA-04088: 觸發(fā)器 'SCOTT.CHECKSAL'執(zhí)行過(guò)程中出錯(cuò)

       觸發(fā)器總結(jié)
      觸發(fā)器可用于
•         數(shù)據(jù)確認(rèn)
•         實(shí)施復(fù)雜的安全性檢查
•         做審計(jì),跟蹤表上所做的數(shù)據(jù)操作等

      查詢觸發(fā)器、過(guò)程及函數(shù)
•         Select * from user_triggers;
•         Select * from user_source;

相關(guān)文章

  • PLSQL導(dǎo)入dmp文件的詳細(xì)完整步驟

    PLSQL導(dǎo)入dmp文件的詳細(xì)完整步驟

    plsql導(dǎo)入.sql和.dmp文件時(shí),會(huì)經(jīng)常用到,對(duì)于初學(xué)者來(lái)說(shuō)可能沒(méi)有那么簡(jiǎn)單,畢竟oracle數(shù)據(jù)庫(kù)比較麻煩,下面這篇文章主要給大家介紹了關(guān)于PLSQL導(dǎo)入dmp文件的詳細(xì)完整步驟,需要的朋友可以參考下
    2023-05-05
  • Oracle 細(xì)粒度審計(jì)(FGA)初步認(rèn)識(shí)

    Oracle 細(xì)粒度審計(jì)(FGA)初步認(rèn)識(shí)

    細(xì)粒度審計(jì)(FGA),是在Oracle 9i中引入的,能夠記錄SCN號(hào)和行級(jí)的更改以重建舊的數(shù)據(jù),本文將詳細(xì)介紹,需要的朋友可以參考下
    2012-12-12
  • ORACLE大批量插入數(shù)據(jù)的詳細(xì)步驟

    ORACLE大批量插入數(shù)據(jù)的詳細(xì)步驟

    很久沒(méi)有做數(shù)據(jù)庫(kù)的批量處理,最近恰好遇到這個(gè)任務(wù),下面這篇文章主要給大家介紹了關(guān)于ORACLE大批量插入數(shù)據(jù)的詳細(xì)步驟,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • oracle impdp network_link參數(shù)使用介紹

    oracle impdp network_link參數(shù)使用介紹

    本文將介紹oracle impdp network_link參數(shù)使用方法,需要了解更多的朋友可以參考下
    2012-11-11
  • Oracle中nvl()和nvl2()函數(shù)實(shí)例詳解

    Oracle中nvl()和nvl2()函數(shù)實(shí)例詳解

    NVL函數(shù)的功能是實(shí)現(xiàn)空值的轉(zhuǎn)換,根據(jù)第一個(gè)表達(dá)式的值是否為空值來(lái)返回響應(yīng)的列名或表達(dá)式,下面這篇文章主要給大家介紹了關(guān)于Oracle中nvl()和nvl2()函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • 直接拷貝數(shù)據(jù)文件實(shí)現(xiàn)Oracle數(shù)據(jù)遷移

    直接拷貝數(shù)據(jù)文件實(shí)現(xiàn)Oracle數(shù)據(jù)遷移

    Oracle 數(shù)據(jù)遷移是比較麻煩的,對(duì)菜鳥來(lái)說(shuō)更是如此。最近由于更換服務(wù)器,需要將Oracle遷移到另外一臺(tái)機(jī)器,在兩個(gè)服務(wù)器環(huán)境相同,以及 Oracle版本相同的前提下,通過(guò)直接拷貝數(shù)據(jù)文件到新服務(wù)器,就可以直接遷移成功。這里記錄一下遷移步驟。需要的朋友可以參考。
    2017-01-01
  • Oracle執(zhí)行計(jì)劃查看方法匯總及優(yōu)劣對(duì)比詳解

    Oracle執(zhí)行計(jì)劃查看方法匯總及優(yōu)劣對(duì)比詳解

    這篇文章主要介紹了Oracle執(zhí)行計(jì)劃查看方法匯總及優(yōu)劣對(duì)比,在?Oracle?數(shù)據(jù)庫(kù)中,查看執(zhí)行計(jì)劃是優(yōu)化?SQL?語(yǔ)句性能的重要工具,本文給大家介紹了幾種常用的查看執(zhí)行計(jì)劃的方法及其優(yōu)劣比較,需要的朋友可以參考下
    2024-11-11
  • Oracle round()函數(shù)與trunc()函數(shù)區(qū)別介紹

    Oracle round()函數(shù)與trunc()函數(shù)區(qū)別介紹

    本文將詳細(xì)介紹Oracle round()函數(shù)與trunc()函數(shù)區(qū)別,需要了解的朋友可以參考下
    2012-11-11
  • WMware redhat 5 oracle 11g 安裝方法

    WMware redhat 5 oracle 11g 安裝方法

    本文將詳細(xì)介紹WMware中redhat 5 安裝oracle 11g方法,需要的朋友可以參考下
    2012-12-12
  • 生產(chǎn)環(huán)境Oracle undo表空間管理實(shí)踐

    生產(chǎn)環(huán)境Oracle undo表空間管理實(shí)踐

    這篇文章主要介紹了生產(chǎn)環(huán)境Oracle undo表空間管理實(shí)踐,Oracle 數(shù)據(jù)庫(kù)有一種維護(hù)信息的方法,用于回滾或撤消對(duì)數(shù)據(jù)庫(kù)的更改,下面文章分享更多的相關(guān)資料需要的小伙伴可以參考一下
    2022-03-03

最新評(píng)論

泽州县| 右玉县| 襄樊市| 弥勒县| 南郑县| 襄樊市| 科尔| 裕民县| 河津市| 邹城市| 海门市| 高陵县| 报价| 吉林市| 重庆市| 娱乐| 万年县| 正安县| 拉孜县| 南木林县| 天津市| 海丰县| 通海县| 尖扎县| 黔西| 平陆县| 阿瓦提县| 镇康县| 锦屏县| 广州市| 南雄市| 肇东市| 岳普湖县| 息烽县| 永吉县| 江川县| 婺源县| 三江| 玉林市| 香港| 抚远县|