學習目標:
1、了解儲存過程的定義和使用
2、了解儲存過程的使用場景
3、能夠根據業務場景編寫儲存過程解決問題
學習過程:
一、儲存過程
在大型資料庫系統中,儲存過程和觸發器具有很重要的作用。無論是儲存過程還是觸發器,都是sql 語句和流程控制語句的集合。就本質而言,觸發器也是一種儲存過程。儲存過程在運算時生成執行方式,所以,以後對其再執行時其執行速度很快。sql server 2005 不僅提供了使用者自定義儲存過程的功能,而且也提供了許多可作為工具使用的系統儲存過程。
建立過程的語法:
create [or replace] procedure
is|as
begin
[exception
end;
過程引數的三種模式:
示例:1、定義儲存過程
--1、根據商品的類別統計商品的數量
create or replace procedure count_goods_bytype( tid in int,gcount out int )
as --宣告變數
begin
select count(*) into gcount from goods where type_id=tid;
end;
2、呼叫儲存過程
--如何呼叫儲存過程
declare
gnum int;
begin
count_goods_bytype(1,gnum);
dbms_output.put_line(gnum);
end;
3、返回值是游標
3.1、定義乙個包,儲存游標變數
create or replace package my_first_pack
as type my_cus is ref cursor;
end;
3.2、定義儲存過程
--根據商品名稱查詢商品的資訊
create or replace procedure goods_types_my(gname in varchar2,goodes out my_first_pack.my_cus)
asbegin
open goodes for select * from goods where goods_name like gname;
end;
二、動態 sql
動態 sql 是指在pl/sql程式執行時生成的 sql 語句,編譯程式對動態 sql 不做處理,而是在程式執行時動態構造語句、對語句進行語法分析並執行,ddl 語句命令和會話控制語句不能在 pl/sql 中直接使用,但是可以通過動態 sql 來執行。
執行動態 sql 的語法:
execute immediate dynamic_sql_string
[into define_variable_list]
[using bind_argument_list];
示例:
--動態sql
--寫乙個儲存過程,用於統計表的行數
create or replace procedure counttable(tablename in varchar2,tablecount out int)
as my_sql varchar(100);
begin
my_sql:= 'select count(*) from '||tablename;
--動態執行
execute immediate my_sql into tablecount;
end;
3 7 虛擬儲存器
主存和聯機工作的輔存共同構成了虛擬儲存器,二者在硬體和系統軟體的共同管理下工作,對應用程式設計師來說,虛擬儲存器是透明的。虛擬儲存器將主存或輔存的位址空間同一編址,形成乙個龐大的位址空間,不必在乎實際的主存容量和程式在主存中實際的位置 使用者程式設計允許涉及的位址稱為虛位址或邏輯位址,虛位址對應的儲...
儲存過程系列之儲存過程sql查詢儲存過程的使用
1.查詢某個表被哪些儲存過程 以下簡稱 sp 使用到 select distinct object name id from syscomments where id in select object id from sys.objects where type p and text like ta...
儲存過程系列之儲存過程sql查詢儲存過程的使用
1.查詢某個表被哪些儲存過程 以下簡稱 sp 使用到 select distinct object name id from syscomments where id in select object id from sys.objects where type p and text like ta...