PL/SQL介紹2


1.使用包
set serveroutput on
begin
--使用包dbms_output
dbms_output.put_line( 'hello world');
end;
/

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);
相關文章
相關標籤/搜索