塊是pl/sql的基本程序單元
pl/sql塊由三部分組成:定義部分、執行部分、例外處理部分
如下:
declear-----定義常量、變量、游標、例外、復雜數據類型
begin -----執行部分,要執行的pl/sql語句和sql語句
exception ---------例外處理部分,處理運行的各種錯誤
end;
最簡單的包
set serveroutput on ----打開輸出選項
begin
dbms_output.put_line('hello Oracle');
end;
說明:
dbms_output 是Oracle所提供的包
(類似Java的開發包),該包包含了一些過程,put_line就是dbms_output包的一個過程
包含定義部分和執行部分
declare
v_ename varchar2(5);-----定義變量
begin
select ename into v_ename from emp where empno=&no; ---no是隨便的
dbms_output.put_line('雇員名:'|| v_ename);
end;
說明:
&地址符表示要接收控制台輸入的變量
||字符拼接
問題:在上面的基礎上把用戶的薪水也顯示出來
declare
v_ename varchar2(5);-----定義變量
v_sal number(7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&no; ---no是隨便的
dbms_output.put_line('雇員名:'|| v_ename ||'工資:' ||v_sal);
end;
ok 了
再一個問題:如果查詢的結果有多條記錄呢????????????????
包含定義部分、執行部分、例外處理部分
為了提高pl/sql的健壯性,加入例外處理,就上面的例子,假如輸入的編號不存在的呢?
declare
v_ename varchar2(5);-----定義變量
v_sal number(7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&no; ---no是隨便的
dbms_output.put_line('雇員名:'|| v_ename ||'工資:' ||v_sal);
exception
when on_data_found
then
dbms_output.put_line('朋友,你輸入的編號不存在!!!');
end;
------------------------------------------------------------------------------------------------------------------
過程:用於執行特定的操作。
實例如下:
(1)編寫一個過程,可以輸入雇員名,新工資,可修改雇員的工資
create procedure zqh_pro3(zqhName varchar2,newSal number) is
begin
update emp set sal=newSal where ename =zqhName;
end;
說明:過程中定義變量在is和begin之間,而在塊中在declare和begin之間
(2)如何調用過程有兩種方法
exec 過程名
call 過程名
(3)如何在Java程序中調用一個存儲過程
編寫TestOraclePro.Java調用過程zqh_pro3
public class TestOraclePro {
public static void main(String[] args) {
try {
//1.加載驅動
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.得到連接
Connection ct = DriverManager.getConnection("jdbc:Oracle:thin:localhost:1521:orcl","scott","tiger");
//3.創建CallableStatement
CallableStatement cs =ct.prepareCall("{call zqh_pro3(?,?)}");
//4.給?賦值
cs.setString(1, "SMITH");
cs.setInt(2, 100);
//5執行
cs.execute();
//6關閉
cs.close();
ct.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
調用前:SMITH的sal=800
調用後:SMITH的sal=100
留給問題:如何使用過程的返回值????