儲存過程詳解
一,概念:儲存過程是一組預編譯的sql語句,常和游標、索引和檢視等一起使用,功能強大但實際工作中使用不多。
二,優缺點:
1.儲存過程預編譯,執行速度較快。將**邏輯存放在資料庫中,便於**移植,減少網路流量
2.需要專門的資料庫人員維護,現實中一般由開發人員維護且不能適應頻繁的需求變動,所以儲存過程一般在專案後期,用在資料統計一類大資料流量演算法邏輯要求比較高的環境
三,基礎知識:
基本結構:begin end
屬性:a dept.dname%type
賦值:(:=)
獲取鍵盤:(&)
查詢:select *** into 變數列表 from 表名;
判斷*2:if 條件 then 語句;elsif 條件 then 語句 else case 變數 when 值 then
迴圈*3:loop 語句 exit when 條件 endloop while 條件 loop語句 end loopfor 臨時變數 in 起始值 結束值 loop語句;end loop;
呼叫:execute immediate sql 語句字串
into 變數列表;
using 引數列表;
異常:exctption when 異常型別 then 處理語句 when others then
四,語法:
create [or replace] procedure
過程名(引數列表)
is|as
宣告部分
begin
執行語句
exception
異常處理
end儲存過程引數
in:用於接收呼叫程式的值,預設的引數模式
out:用於向呼叫程式返回值。
in out:既又
四,幾個例項:
4.1基礎查詢(帶條件):
注釋:sqlserver中 引數用@表示如 @username char(20)
createor replace procedure p1 (
id in number(20),
str in varchar(20)
)no integer :=0;
name string; is
begin
select t_id,t_name into no,name from t1 where id=id and str=str
exception
when no_data_found then -- catches all 』no data found』 errors
end
4.2 判斷
4.2.1 if else判斷
create or replace procedure p2( a in number(20)) is
begin
if a <5 then
dbms_output.put_line('小於5');--控制台輸出
elseif a < 10 then ...
else ...
end if;
end;
4.2.2 case判斷
create or replace procedure p3( a in number(20)) is
begin
case a
when 1 then ...
when 2 then ...
when 3 then ...
else ...
end case;
end4.3迴圈
4.3.1do while
create or replace procedure p4 is
a integer;
begin
a:=0;
loop
...a:=a+1;
exit when a>10;
end loop;
end;
4.3.2 while
create or replace procedure p5 is
a integer;
begin
a:=0;
while a<300 loop
...a:=a+1;
end loop;
end;
4.3.3 for in (遍歷游標,資源來自shawn)
create or replace procedure p6 is
cursor csr_dept is select name from dept;
row_dept csr_dept%rowtype
begin
for row_dept in csr_dept loop
dbms_output.put_line(row_dept.name);
end loop;
end;
Oracle儲存過程呼叫儲存過程
oracle儲存過程呼叫有返回結果集的儲存過程一般用光標的方式,宣告乙個游標,把結果集放到游標裡面,然後迴圈游標 declare newcs sys refcursor cs1 number cs2 number cstype table rowtype table列的個數和newcs返回的個數一樣...
ORACLE儲存過程
自定義函式開始 create or replace function fn wftemplateidget templatecategoryid number,organid number,templatemode number return number istemplateid number i...
Oracle 儲存過程
create or replace procedure p 有就替換,沒有就建立 iscursor c is select from emp for update begin for v emp in c loop if v emp.deptno 10 then update emp2 set sa...