PL SQL儲存過程備忘

2021-08-25 18:00:55 字數 3501 閱讀 1648

嗯,好久不寫儲存過程了,最近有乙個業務用資料庫的儲存過程來實現比較妥當,於是再次接觸了一下,下面是一些記錄,以便以後翻查;

1

、如何定義乙個儲存過程:

下面是乙個簡單的儲存過程定義,實現了將「

hello

」列印出來

create or replace procedure p_test(p_start_time test.create_time%type, p_end_time test.create_time%type) is

//這裡定義所有在正文中會使用到的區域性變數

begin

//這裡是儲存過程正文

dbms_output.put_line('hello');

end p_test;

說明:p_start_time test.create_time%type

代表該形參型別與test表的create_time欄位一致;

2

、如何在

sql視窗呼叫乙個名為

p_test

的儲存過程?

格式如下:

declare

begin

p_test(sysdate,sysdate);

end;

3

、如何使用迴圈?

loop

//這裡是迴圈中的內容

end loop;

4

、如何在迴圈中

continue?

loop

if 條件滿足

then

goto main_loop;

end if;

<>

null;

end loop;

5

、如何使用游標?

定義游標示例:

cursor

mycur is

select a,

b, c

from

tbl_test;

開啟游標示例:

if my

cur%isopen = false then

open

mycur;

end if;

loop

fetch

mycur into

tmp_a,tmp_b,tmp_c;

exit when

mycur%notfound;

dbms_output.put_line(

tmp_a

|| ',' ||

tmp_b

|| ',' ||

tmp_c);

end loop;

關閉游標示例:

close

mycur;

乙個完整的例子:

create or replace procedure p_test is

cursor mycur is

select a, b, c from tbl_test;

tmp_a varchar(32);

tmp_b varchar(32);

tmp_c varchar(32);

begin

if mycur%isopen = false then

open mycur;

end if;

loop

fetch mycur

into tmp_a, tmp_b, tmp_c;

exit when mycur%notfound;

dbms_output.put_line(tmp_a || ',' || tmp_b || ',' || tmp_c);

end loop;

close mycur;

end p_test;

6

、使用結構體與游標結合進行使用

在上面的應用中,我們可以把

a,b,c

三個值放到乙個結構體中,以方便使用;

結構體定義示例:

type sourcedata is record(

a tbl_test.a%type,

b tbl_test.b%type,

c tbl_test.c%type);

對迴圈的使用,我們也可以通過使用

for-in

語句,下面的完整示例:

create or replace procedure p_test is

cursor mycur is

select a, b, c from tbl_test;

type sourcedata is record(

a tbl_test.a%type,

b tbl_test.b%type,

c tbl_test.c%type);

srcdata sourcedata;

begin

for srcdata in mycur loop

dbms_output.put_line(srcdata.a || ',' || srcdata.b || ',' ||

srcdata.c);

end loop;

end p_test;

7

、如何獲取當前插入資料的

id?

insert into tbl_test(id,name) values(seq_test.nextval,'myname');

select seq_test.currval into tmpid from dual;

8

、在儲存過程處理過程中,遇到異常一般如何處理?

下面是乙個儲存過程正文中的常用格式:

create or replace procedure p_test(p_start_time test.create_time%type, p_end_time test.create_time%type) is

begin

//這裡做一些資料庫操作

commit;

exception

//遇到異常,則回滾

when others then

rollback;

raise;

end p_test;

9

、常用函式

列印:dbms_output.put_line('

hello

' ||

' ' || 'world');

字串轉日期:

to_date('2011-01-10 12:13:14','yyyy-mm-dd hh24:mi:ss')

日期轉字串:

to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')

去掉前後空格:

trim(' str ');

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...