資料庫學習12 儲存過程

2021-06-22 16:24:45 字數 3505 閱讀 8202

子程式和程式包

1.1子程式

1.1.1 過程

1.1.2 函式 形參只能in,必須return,形參和返回值只能是sql型別;

1.2程式包

/*

命名塊: 1儲存過程 2函式

*//*

過程 的格式:

create or replace procedure pro_test(形參列表)

is|as

--宣告部分

begin

exception

end pro_test;

*/create or replace procedure pro_print

isbegin

dbms_output.put_line('第乙個儲存過程...');

end pro_print;

--檢視使用者建立的儲存過程

select * from user_objects

where object_type=upper('procedure');

begin

pro_print;

end;

--建立乙個儲存過程,輸入工號,列印名字,

--沒找員工,就列印『該員工不存在』

create or replace procedure pro_a(e_id number)

is e_name emp.ename%type;

begin

select ename into e_name from emp

where empno= e_id;

dbms_output.put_line(e_name);

exception

when others then

dbms_output.put_line('該員工不存在');

end pro_a;

begin

pro_a(&ii);

end;

--in 引數 只能傳遞進來,不能發生變化

create or replace procedure pro_in_parm(a in number)

is begin

dbms_output.put_line(a);

end pro_in_parm;

begin

pro_in_parm(6);

end;

--out 引數 不能傳遞進來,但是可以發生變化,而且可以輸出

create or replace procedure

pro_out_parm(a out number)

is begin

dbms_output.put_line(a);

a:=111;

end pro_out_parm;

declare

v number default 6;

begin

pro_out_parm(v);

dbms_output.put_line('外部:'||v);

end;

--in out 引數

create procedure

pro_in_out(a in out number)

isbegin

dbms_output.put_line('傳遞進來的是:'||a);

a:=a**3; --三次方

end pro_in_out;

declare

i number;

begin

i:= 4;

pro_in_out(i);

dbms_output.put_line('外部:'||i);

end;

create or replace procedure

pro_swap(a in out number,b in out number)

is temp number;

begin

temp:=b;

b:= a;

a:= temp;

end pro_swap;

declare

t1 number;

t2 number;

begin

t1 := 111;

t2 := 222;

pro_swap(t1,t2);

dbms_output.put_line('t1:'||t1);

dbms_output.put_line('t2:'||t2);

end;

/* 函式的格式:

create or replace function 函式名字

return 資料型別

is|as

begin

exception

end 函式名字;

*/create or replace function yao

return varchar2

is begin

return 'yao';

end yao;

select * from user_objects

where object_type = 'function';

begin

dbms_output.put_line(yao);

end;

select yao from dual;

--寫乙個函式,根據員工編號,返回工作年限

--select 語句呼叫函式

create or replace function fun_a(e_id in out number)

return number

is h date;

begin

select hiredate into h from emp

where empno=e_id;

e_id := 100;

return trunc((sysdate-h)/365);

end fun_a;

select fun_a(7839) from dual;

declare

i number default 7839;

begin

dbms_output.put_line(fun_a(i));

dbms_output.put_line(i);

end;

create or replace function f

return number

isbegin

execute immediate

'create table tt(t number)';

return 3;

end;

--儲存過程和函式的區別 :

-- 1. 函式必須有return語句,而過程裡面可以有也可以沒有

-- 2. 函式必須返回乙個值,而過程即使return也不會返回值

-- 3. 過程可以像其他所有的pl/sql程式一樣使用,而函式是有特定目的程式塊

--?在jdbc或其他的持久方案裡怎麼呼叫儲存過程

MSSQL資料庫 儲存過程學習

這個例子裡面我們從兩個表中取出頭兩行,然後合併到乙個表中。在現實中我們常常會遇到這樣的情況,在乙個資料庫中存在兩個表,假設表1儲存著公司個產品本季度銷售資訊,表2儲存著公司本季度欠款金額情況。在乙個頁面中我們想把這兩個資訊顯示出來。通常的做法是在程式中進行兩次sql查詢,返回兩個結果集,在分別顯示出...

MSSQL資料庫 儲存過程學習

這個例子裡面我們從兩個表中取出頭兩行,然後合併到乙個表中。在現實中我們常常會遇到這樣的情況,在乙個資料庫中存在兩個表,假設表1儲存著公司個產品本季度銷售資訊,表2儲存著公司本季度欠款金額情況。在乙個頁面中我們想把這兩個資訊顯示出來。通常的做法是在程式中進行兩次sql查詢,返回兩個結果集,在分別顯示出...

資料庫儲存過程學習筆記

oracle10gr2 學了下資料庫儲存過程,總結一下。對剛才學習有所交代。儲存過程結構 create or replace procedure 過程名 引數1,引數2,引數3.as資料定義 i number begin 儲存過程體 end 一 引數1,引數2,引數3 引數型別有 in 值傳遞,預設...