oracle觸發器和儲存過程

2021-09-30 20:14:25 字數 1918 閱讀 1888

一:

觸發器分為行級觸發和語句級觸發器,

for each now — 行級觸發起

基本語法為:

create or replace trigger tri_name before insert on table_name for each now

begin

select sysdate into :new.col_name from dual;

end;

如果是trigger中,肯定是有以下兩個元素的:

:new

:old

指定是同乙個值,乙個指代原值,乙個指代修改後的值

insert時 只有new 沒有old 代表著要插入的新記錄

delete時 只有old 沒有new 代表著要刪除的記錄

update時 二者都可用 new表示要替換的新資料、old表示要被更改的原來的資料行.

":="是賦值語句

在pl/sql中使用select語句時,要與into子句一起使用,查詢的返回值被賦予into子句中的變數。

基本語法

兩個表:new和:old關鍵字 — :new 是要插入表中的 :old 是表中已經存在的舊的記錄

乙個語句寫入所有dml關鍵字

如果乙個trigger中,update、delete、insert都有,則標準格式為:

if inserting then

***;

elsif deleting then

***;

elsif updating then

***;

end if;

除了select語句不同,其餘update\delete\insert都是一樣的

兩個表做乙個trigger,則:old :new的含義

如果函式或trigger**現了異常,則:

exception

when no_data_found then

return 「no data found.」 – 處理方法

end;

二:游標cursor:

只有變數和游標才能放在declare**塊中。

游標是維護查詢結果的記憶體中的乙個區域,游標在執行dml語句時開啟。

查詢返回結果超過一行時,就需要乙個顯式游標,且此時使用者不能使用select into語句

select into 可以是多列,但不能是多行,如果查詢出有多行,則必須要用游標

基本語法:

cursor c_s is select name,num from school;

由於游標儲存的資料一定會超過一行,因此如果要使用必定會用到迴圈loop。

使用迴圈有兩種方式:

1.for c in 游標名 loop

*** – 執行**塊

end loop;

2.loop

fetch 游標名 into 宣告變數1,宣告變數2

這種方法要手動開啟和關閉游標

迴圈,if elsif**塊 基本語法。

總結觸發器的用法:基本語法格式(包括一些基本的關鍵字、游標),多個dml操作寫在乙個語句中,

迴圈,if elsif**塊。

三:使用group by的兩個要素:

出現在select後面的字段要麼是group by的字段,要麼是聚合函式中的。

許可權:許可權和同義詞一般要一起設定,設定同義詞後,查其他使用者的表就不需要寫其他使用者的使用者名稱

設定同義詞和把表許可權賦給另一使用者,都是在同乙個使用者下執行兩個sql語句即可。

四:execute immediate 作用:在pl/sql(儲存過程)中執行ddl語句,dml語句不需要用到。

執行動態sql語句,給動態語句傳值(using 子句)

一般的pl/sql程式設計中,在dml和事務控制的語句中可以直接使用sql,

但是ddl語句及系統控制語句卻不能在pl/sql中直接使用

oracle儲存過程和觸發器

過程 建立過程,create procedure語句可以用於建立過程,簡化語法如下 create or replace procedure procedure name parameter name in out in out type begin procedure body end parame...

儲存過程和觸發器

儲存過程 stored procedure 是在大型資料庫系統中,一組為了完成特定功能的sql 語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。簡單的敘述 在大型資料庫系統中,儲存過程和觸發器具有很重要的作用。無論是儲存過程還是觸發器,都是s...

儲存過程和觸發器

1 什麼是儲存過程呢?定義 將常用的或很複雜的工作,預先用sql語句寫好並用乙個指定的名稱儲存起來,那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫execute,即可自動完成命令。講到這裡,可能有人要問 這麼說儲存過程就是一堆sql語句而已啊?microsoft公司為什麼還要...