2. 變量賦值
declare
v_ename varchar2(5);
v_sal number(7,2);
begin
select ename,sal
into
v_ename, v_sal
from emp
where empno=&no; --注意賦值的順序, 還有
&表示要從控制檯輸入變量
dbms_output.put_line('僱員名:‘||v_ename); --字符串拼接
end;
/
into v_name: 查出來賦予變量值
||:字符串拼接
&:表示要從控制檯輸入變量
3. 異常處理
declare
v_ename varchar2(5);
v_sal number(7,2);
begin
select ename,sal
into v_ename, v_sal
from emp
where empno=&no;
dbms_output.put_line('僱員名:‘||v_ename);
exception
when no_data_found
then
dbms_output.put_line(
'The input number is wrong');
end;
/
4. 傳遞參數
create
procedure sp_pro3(spname varchar2, newSal number)
is
begin
update emp
set sal=newsal
where ename=spName;
end;
/
執行:exec sp_proc3('scott', 3567);
5. java程序調用存儲過程
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManage.getConnection("jdbc:oracle:thin@127.0.0.1:1521:wilson","scott","tiger");
//經過鏈接,取得存儲過程
CallableStatement cs = conn.prepareCall("{call sp_pro3(?,?)}");
//對裏面的內容賦值
cs.setString(1,"smith");
cs.setInt(2,1000);
//執行存儲過程
cs.
execute();
//釋放資源
cs.
close();
conn.
close();
6. 函數
create function sp_fun1(spName
varchar)
return
is number yearSal number(7,2);
begin
select sal*12+nvl(comm,0)*12
into yearSal
from emp
where ename=spName;
return yearSal;
end;
/
在sqlplus中調用函數:
var income number
call sp_fun1('scott') into income ;
7. 包
--建立包sp_package
create package
sp_package
is
procedure update_sal(
name varchar2, newsal number);
function annual_income(
name varchar2)
return number);
end;
/
把包裏面的存儲過程和函數實現:
create
or
replace package body sp_package
is
procedure update_sal(
name varchar2, newsal number)
is
begin
update emp
set sal=newsal
where ename=
name;
end;
function annual_income(
name varchar2)
return number
is annual_salary number;
begin
select sal*12+nvl(comm,0)
into annual_salary
from emp
where ename=
name;
return annual_salary'
end;
end;
使用包中的函數和存儲過程
exec sp_package.update_sal(
'scott',120);