程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> oracle之塊、過程、包

oracle之塊、過程、包

編輯:Oracle數據庫基礎

塊是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
  oracle之塊、過程、包調用後:SMITH的sal=100
  oracle之塊、過程、包留給問題:如何使用過程的返回值????

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved