程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> OraclePL/SQL編程基礎實例2

OraclePL/SQL編程基礎實例2

編輯:Oracle教程

if 循環 控制語句

if--then endif

if----then ----else endif

if-----then --elsif then ----else endif

--編寫一個過程,可以 輸入一個雇員名,如果該雇員的工資低於2000就給他增加10%
create or replace procedure sp_pro6(spName varchar2) is
v_sal emp.sal %type;
begin
select sal into v_sal from emp where ename =spName;
--判斷
if v_sal<2000 then
update emp set sal=sal*1.1 where ename =spName;
end if;
end;
--======####案例s33 編寫一個過程,可以 輸入一個雇員名,如果該雇員的補助不是0就在原基礎上增加100,如果是0就加200
create or replace procedure sp_pro7(spName varchar2) is
v_comm emp.comm %type;
begin
select comm into v_comm from emp where ename =spName;
--判斷
if v_comm<>0 then
update emp set comm=comm+100 where ename =spName;
else
update emp set comm=comm+200 where ename =spName;
end if;
end;

----========循環 loop end loop
-----案例 編寫一個過程 可輸入用戶名 並添加10個用戶到users表中 用戶編號從1來時增加
--建個表
create table users1(uid1 number,uname varchar2(40));

create or replace procedure sp_pro8(spName varchar2) is
--定義變量
v_num number :=1;
begin
loop
insert into users1 values(v_num,spName);
--判斷是否退出循環
exit when v_num =10;
--自增
v_num:=v_num+1;
end loop;
end;

----------------===while ...loop end loop

----===案例 從11 開始 添加10個用戶
create or replace procedure sp_pro8(spName varchar2) is
--定義變量
v_num number :=11;
begin
while v_num<=20
loop
--執行
insert into users1 values(v_num,spName);
--自增
v_num:=v_num+1;
end loop;
end;
---------------------for
begin for i in reverse 1.. 10 loop
insert into users1 values(v_num,spName);
end loop;
end;

-----------------順序控制語句 goto null
goto label

<<label>>

-----=-----------返回結果集的過程----=======
---1.----創建 一個 包 在該包中 定義一個 類型 test_cursor 是個游標
Create or replace package testpackage as
type test_cursor is ref cursor;
end testpackage;
-----2.創建過程
create or replace procedure sp_pro9 (spNO in number,p_cursor out testpackage.test_cursor)
is
begin
open p_cursor for select * from emp where deptno=spNO;
end;

-----3.如何在java中調用
---1.創建 Callablestatement cs =ct.prepareCall([call sp_pro9(?,?)]);
---- cs.setInt(1,10);
----cs.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);
--執行--cs.execute();
--得到結果集
/*ResultSet rs=(ResultSet)cs.getObject(2);

while(rs.next()){
....
}*/

---------------------例外處理---------
case_not_found
data_not_found
cursor_already_open
dup_val_on_index 唯一索引重復
invaild_cursor 在不合法的游標上執行操作 比如 從沒有打開的游標取值 或關閉沒有打開的游標
invalid_number
too_many_rows select into 的時候 返回超過一行
zero_divide 2/0
value_error 變量長度不足以容納實際長度

-----自定義例外
create or replace procedure ex_test(spNO number)
is
--定義一個例外
myex exception;
begin
update emp set sal=sal+1000 where empno=spNO;
--sql%notfound 表示沒有update
--raise myex 觸發myex
if sql%notfound then
raise myex;
end if;
exception
when myex then
dbms_output.put_line('沒有更新任何用戶');

end;

-----------------------------視圖---------------
--視圖不能添加索引
create view myview as select * from emp where sal<1000;
select * from myview;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved