子程式和程式包
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 值傳遞,預設...