37 儲存過程

2021-08-31 16:30:42 字數 2161 閱讀 1313

學習目標:

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