標籤:部分 ase 資料庫 http otf grant 自動 添加 HERE
-- View:視圖(虛表),不佔用物理空間!
-- 如果沒有許可權
-- 使用dba登入 grant create any view to 使用者名稱;
create or replace view teacher_view
as
select tname,sal from teacher
-- 查詢檢視
select * from teacher_view
************=======PL/SQL=======*************
--PL/SQL (Procedural Language) 過程化sql語言! 在原本的sql語句上 添加了 邏輯判斷
--迴圈等操作! 在資料庫 執行pl/sql程式時,pl/sql和sql語句時分別進行解析和執行的!
--文法結構 := 就是指派陳述式
--01.declare 可選部分 聲明 : 變數, 異常,遊標...
--02.begin 必要部分 書寫:sql語句 和pl/sql語句
--03.exception 可選部分 針對出現異常時候的處理
--04.end 必要部分
-- 根據指定老師的編號查詢薪水 輸出一個結果
declare
v_name teacher.tname%type;
v_sal teacher.sal%type;
v_result varchar2(30);
begin
select t.tname,t.sal into v_name,v_sal from teacher t where tno=1002;
--根據薪水 得到不同的返回結果
if v_sal>=2000 and v_sal<=10000 then
v_result:=‘還可以吧‘;
elsif v_sal>10000 and v_sal<=40000 then
v_result:=‘真可以‘;
elsif v_sal>40000 then
v_result:=‘牛牛牛‘;
else
v_result:=‘咩咩‘;
end if;
dbms_output.put_line(v_name||‘:‘||v_sal||‘=====‘||v_result);
--根據 v_result的值 輸出不同的結果
case v_result
when ‘還可以吧‘ then
dbms_output.put_line(v_name||‘工資在2k到10k‘);
when ‘真可以‘ then
dbms_output.put_line(v_name||‘工資在10k到40k‘);
when ‘牛牛牛‘ then
dbms_output.put_line(v_name||‘工資在40k以上‘);
else
dbms_output.put_line(v_name||‘工資2k以下‘);
end case;
end;
************=======迴圈=======*************
--迴圈結構
--01.loop 文法
loop
執行的語句;
exit when 條件;
end loop;
declare
i number;
begin
i:=1;
loop
dbms_output.put_line(i);
i:=i+1;
exit when i>50;
end loop;
end;
--02.while 文法
while 條件 loop
執行的語句;
end loop;
declare
i number;
begin
i:=1;
while i<=50 loop
dbms_output.put_line(i);
i:=i+1;
end loop;
end;
--03.for 文法
for 變數 in 範圍(上限,下限)loop
執行的語句;
end loop;
declare
i number;
begin
for i in 1..50
loop
dbms_output.put_line(i);
end loop;
end;
************=======遊標=======*************
--遊標:是系統給我們使用者 開設一個資料緩衝區! 存放的是sql語句執行的結果!
--每個遊標區都有一個名字,使用者通過遊標一行一行的擷取記錄!
--01.隱式遊標 在我們Pl/sql中,程式執行sql語句時 自動建立! ====>sql
--02.顯示遊標 可以返回多行的查詢!
--03.REF遊標 用於處理運行時才能確定的動態SQL 查詢結果
--隱式遊標屬性
--01.sql%found 影響了一行或者多行 都返回 true
--02.sql%notfound 沒有影響行數 返回 true
--03.sql%rowcount sql語句影響的行數
--04.sql%isopen 遊標是否開啟,始終為false
declare
tname teacher.tname%type; --聲明一個變數
cursor teacher_cursor is select tname from teacher; --聲明遊標
begin
open teacher_cursor; --開啟遊標
fetch teacher_cursor into tname;
--迴圈輸出tname
while teacher_cursor%found
loop
dbms_output.put_line(‘教師的姓名====‘||tname);
fetch teacher_cursor into tname;
end loop;
close teacher_cursor;--關閉遊標
end;
Oracle(六)PL/SQL、迴圈和遊標