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