PL SQL語言 儲存過程 儲存函式

2021-08-07 16:08:43 字數 2800 閱讀 2337

給變數賦值用 := 賦值 。

連線兩個字串用 || 連線,用加號是不好使的!

str1:=str2||str3;

if 條件 then

—業務邏輯

elsif 條件 then

—業務邏輯

end if;

其中的elsif需注意,並不是elseif。

cursor c1 is select * from emp where deptno=10; —-給游標賦值

是is不是as!

游標是寫在declare下的。

關於游標與for的應用:

declare

cursor c1 is select * from emp where deptno=10;

----給游標賦值

v_obj emp%rowtype;

begin

for v_obj in c1 ---幫助我們做 open 和close 操作

loop

dbms_output.put_line(v_obj.empno || '==' || v_obj.ename);

end loop;

end;

帶引數的游標是在開啟游標時賦予引數值的:

declare   -----引數的變數型別  不能寫長度

cursor c1(dno number) is select * from emp where deptno=dno;

----給游標賦值

v_obj emp%rowtype;

begin

open c1(20);

----開啟游標 並賦值

loop

fetch c1 into v_obj;

exit when c1%notfound; ----判斷游標為空後跳出

dbms_output.put_line(v_obj.empno || '==' || v_obj.ename);

end loop;

close c1 ;----關閉游標

end;

是預編譯到資料庫的一段業務邏輯**。

編寫格式:

create  [or replace]  procedure  儲存過程名稱 (引數名稱  [in]/out  引數的資料型別 ...)

as/is

---變數宣告

begin

----業務邏輯

end;

儲存過程的呼叫有兩種方式:

-------------呼叫---------------

---1. 不常用

call get_year_sals(7788);

---2. 常用

begin

get_year_sals(7782);

end;

1方式不常用是因為它接收不了out型別的引數。

格式:

create  [or replace]  function  儲存函式名稱(引數名稱  [in]/out  引數的資料型別 ...)return 返回值資料型別

as /is

begin

retrun 返回值;

end;

儲存函式與儲存過程功能都差不多,儲存函式的retrun返回值功能儲存過程可以通過out型別的引數達到。

在呼叫時,返回值必須接收!

儲存過程與儲存函式的區別:

——-1. 語法稍有區別

——-2. 儲存函式 能出現在sql語句中 儲存過程不能

------自定義單行函式

select e.*,get_year_sals_fun(e.empno) from emp e ;

觸發器:

格式:

create [or

replace] trigger 觸發的名稱

before/after

insert/update/delete

on 表

foreach

rowdeclare

begin

end;

在工作中一般用不到觸發器,因為功能太強大,風險性太大。

觸發器可以用來oracle的主鍵的自增賦值,其中用到了序列:

create

orreplace

trigger tri_id_emp

before

insert

on emp

foreach

rowdeclare

v_id number(10);

begin

select seq.nextval into v_id from dual;

:new.empno :=v_id;

end;

注:觸發器有兩個級別,

———–語句級觸發器 預設不寫指令

———–行級觸發器 如果要用 :old :new 必須寫 for each row

:old 表示執行修改語句時修改之前的記錄,並不是單一的字段,是整行記錄。

:new表示執行修改語句時修改之後的記錄

PL SQL儲存過程

or replace 建立或替換,如果存在就替換,不存在就建立create or replace procedure piscursor cisselect from dept2 for update beginfor row record in c loopif row record.deptno...

pl sql 儲存過程

在這段時間的開發中資料庫用的是oracle以前用的都是mssql它們的儲存過程的寫法還有一點不一樣,所以花了一天的時間看了看!以下是我做的乙個小例子!create table mytesttable id number,name varchar2 10 insert into mytesttable...

PL SQL 儲存過程

1 游標的設計開發 什麼是游標,為什麼用游標,怎樣使用游標 2 儲存過程 儲存過程的建立,引數使用,儲存過程的執行 3 儲存函式的設計 函式的建立,引數使用,函式的呼叫 4 包的設計與應用 什麼是包,包的建立及使用 儲存過程 建立語法 create or replace procedure proc...