在sqlplus中serveroutput是默認(rèn)關(guān)閉的,使用下面的方法可以打開
set serveroutput on
顯示隨機數(shù)
begin dbms_output.put_line(dbms_random.value(1,100)); end;
declare rnd number; begin rnd:=floor(dbms_random.value(1,100)); dbms_output.put_line(rnd); end;
在一行上輸出SCOTT的薪水及所在部門名稱
declare v_sal number(7,2); v_dname varchar2(14); begin select sal,dname into v_sal,v_dname from emp join dept using(deptno) where ename='SCOTT'; dbms_output.put_line('sal:'||v_sal||' dname:'||v_dname); end;
子程序
本質(zhì)就是具名塊
一次編譯,多次運行
包
將邏輯上相關(guān)聯(lián)的PL/S?L類型、變量常量、子程序、游標(biāo)和異常等封裝在一起
可以將個包看作是一個小型的應(yīng)用程序
觸發(fā)器
在一個事件之前或之后觸發(fā)
通常是用于完成數(shù)據(jù)同步維護(hù)、關(guān)聯(lián)事務(wù)處理、預(yù)方誤操作等情況
?
輸入輸出
ー大多數(shù)PL/SQL的輸入輸出是通過SQL語句完成的,比如通過SQL存取數(shù)據(jù)
其他的PL/SQL輸入輸出是通過 Oracle自身提供的相關(guān)包來實現(xiàn)
DBMS OUTPUT
HTF? ? 用在網(wǎng)頁編寫當(dāng)中去使用的
HTP? ??用在網(wǎng)頁編寫當(dāng)中去使用的
DBMS_PIPE? ? 可以將在一個實例上運行的不同的會話之間的通訊
UTL_FILE? ? 文件的讀寫操作
UTL_HTTP
UTL_SMTP? ? 發(fā)郵件的
?
數(shù)據(jù)抽象
游標(biāo)
復(fù)合數(shù)據(jù)
集合
記錄
抽象數(shù)據(jù)類型
%TYPE
DEMO 2.1
%ROWTYPE
DEMO3取出最高薪水和最低薪水差距最大的薪水級別的信息
declare v_sal emp.sal%type; v_dname dept.dname%type; begin select sal,dname into v_sal,v_dname from emp join dept using(deptno) where ename='SCOTT'; dbms_output.put_line('sal:'||v_sal||' dname:'||v_dname); end;
declare cursor sg is select * from (select * from salgrade order by hisal-losal desc) where rownum<=1; v_sg sg%rowtype; begin open sg; fetch sg into v_sg; dbms_output.put_line('grade:'||v_sg.grade||' losal:'||v_sg.losal||' hisal:'||v_sg.hisal); close sg; end;
?控制語句
declare maxgap number:=0; maxsg salgrade%rowtype; begin for v_sg in (select * from salgrade) loop dbms_output.put_line('grade:1'||v_sg.grade||' losal:'||v_sg.losal||' hisal:'||v_sg.hisal); if maxgap<v_sg.hisal-v_sg.losal then maxsg:=v_sg; end if; end loop; dbms_output.put_line('grade:'||maxsg.grade||' losal:'||maxsg.losal||' hisal:'||maxsg.hisal); end;
PL/SQL架構(gòu)
PL/SQL引擎
?
本文摘自 :https://www.cnblogs.com/