Oracle PL SQL 語句塊用法

2021-09-30 06:13:41 字數 3714 閱讀 1294

set serveroutput on;

begin

update scott.emp set sal=800.00 where empno='7369';

if sql%found then

dbms_output.put_line('表已更新');

else

dbms_output.put_line('表沒有更新');

end if;

end;

declare

my_emp emp%rowtype;

cursor emp_cur is select empno,ename from emp where sal<2500.00;

begin

open emp_cur;

loop

fetch emp_cur into my_emp.empno,my_emp.ename;

exit when emp_cur%notfound;

dbms_output.put_line(emp_cur%rowcount||'姓名'||my_emp.ename);

end loop;

close emp_cur;

end;

---7、編寫乙個pl/sql程式,以接受使用者輸入的訂單編號(orderno),然後檢查訂單的狀態。

--如果訂單狀態(ostatus)為'p',則刪除訂單,否則顯式訊息'該訂單已確認,無法刪除'。

declare

orderno number(5);

status varchar2(5);

begin

orderno :=&id;

select status into status from order_master where orderno=orderno;

if (status ='p') then

delete order_master where orderno=orderno;

dbms_output.put_line(sql%rowcount);

else

dbms_output.put_line('無法刪除');

end if;

--編寫乙個pl/sql程式,使用游標顯式銷售報表。如果目標銷售額(tsales)大於實際銷售額(asales),

--則顯式訊息"需提高銷售額"。如果tsales等於asales,則顯示訊息"已達到銷售額",

--否則顯示訊息"銷售業績出色"。(方法很多,可以考慮用迴圈游標)

declare

tsales number;

asales number;

cursor sales_cur is select * from salesdetails;

begin

for sales_rec in sales_cur

loop

if sales_rec.tsales > sales_rec.asales then

dbms_output.put_line('產品'||sales.rec.pid||'要提高銷售額');

else

if sales_rec.tsales = sales_rec.asales then

dbms_output.put_line('產品'||sales.rec.pid||'已達到銷售額');

else

dbms_output.put_line(('產品:' ||sales_rec.pid||'銷售業績出色);

end if;

end if;

end loop;

end;

---sal 800--2000一般

-- 2000--4000好

-- 4000-5000比較好

declare

cursor emp_cur is select * from emp;

begin

for sals in emp_cur

loop

if sals.sal>800 and sals.sal<2000 then

dbms_output.put_line(sals.ename||'工資一般'||sals.sal);

end if;

if sals.sal>2000 and sals.sal<4000 then

dbms_output.put_line(sals.ename||'工資好'||sals.sal);

end if;

if sals.sal>4000 then

dbms_output.put_line(sals.ename||'工資比較好'||sals.sal);

end if;

end loop;

end;

-----

---sal 800--2000  加1000

-- 2000--4000  加2000

-- 4000-5000加3000

declare

cursor emp_cur is select * from emp;

begin

for sals in emp_cur

loop

if sals.sal >800 and sals.sal<2000 then

update emp set sal =sal+1000 where sal between 800 and 2000;

end if;

if sals.sal>2000 and sals.sal<4000 then

update emp set sal =sal+2000 where sal between 2000 and 4000;

end if;

if sals.sal>4000 then

update emp set sal =sal+3000 where sal >4000;

end if;

end loop;

end;

------動態sqlcreate table 動態insert data 用游標將資料查出來

declare

sqlstr varchar2(2000);

sqlins varchar2(5000);

str varchar2(200);

type cur is ref cursor;

c cur;

begin

str :='1234';

sqlstr :='create table test (id number,name varchar2(50))';

sqlins :='insert into test values(1,'||''''||str||''''||')';

execute immediate sqlstr;

execute immediate sqlins;

end;

insert into test values(2,'123');

---用動態游標將資料查出來--------

declare

type cur is ref cursor;

c cur;

id number;

begin

open c for select id from test;

loop

fetch c into id;

exit when c%notfound;

dbms_output.put_line(id);

end loop;

end;

Oracle PL SQL語句塊的使用

oracle database,又名 oracle rdbms,或簡稱 oracle 是甲骨文公司的一款關聯式資料庫管理系統。5.1 建立資料檔案大小20m的表空間 create tablespace usertbs1 datafile d tmp usertbs1.dbf size 20m 5.2...

Oracle 「PL SQL語句實驗(1)」

1 宣告乙個記錄變數emp record 將emp表所有成員放入變數中,列印編號為7788的員工名稱和工資資訊。declare emp record emp rowtype begin select into emp record from emp where empno 7788 dbms out...

Oracle PL SQL語言基礎 控制語句

預定義異常種類 異常處理 異常說明 access into null 在未初始化物件時出現 case not founf 在case 語句中的選項與使用者輸入的資料不匹配時出現 collection is null 在給尚未初始化的表或陣列賦值時出現 cursor already open 使用者試...