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 使用者試...