oracle預存程序--在應用程式中訪問預存程序程式完整舉例

來源:互聯網
上載者:User

標籤:

認識預存程序和函數

預存程序和函數也是一種PL/SQL塊,是存入資料庫的PL/SQL塊。但預存程序和函數不同於已經介紹過的PL/SQL程式,我們通常把PL/SQL程式稱為無名塊,而預存程序和函數是以命名的方式儲存於資料庫中的。和PL/SQL程式相比,預存程序有很多優點,具體歸納如下:
* 預存程序和函數以命名的資料庫物件形式儲存於資料庫當中。儲存在資料庫中的優點是很明顯的,因為代碼不儲存在本地,使用者可以在任何客戶機上登入到資料庫,並調用或修改代碼。
* 預存程序和函數可由資料庫提供安全保證,要想使用預存程序和函數,需要有預存程序和函數的所有者的授權,只有被授權的使用者或建立者本身才能執行預存程序或調用函數。
* 預存程序和函數的資訊是寫入資料字典的,所以預存程序可以看作是一個公用模組,使用者編寫的PL/SQL程式或其他預存程序都可以調用它(但預存程序和函數不能調用PL/SQL程式)。一個重複使用的功能,可以設計成為預存程序,比如:顯示一張工資統計表,可以設計成為預存程序;一個經常調用的計算,可以設計成為儲存函數;根據僱員編號返回僱員的姓名,可以設計成儲存函數。
* 像其他進階語言的過程和函數一樣,可以傳遞參數給預存程序或函數,參數的傳遞也有多種方式。預存程序可以有返回值,也可以沒有返回值,預存程序的返回值必須通過參數帶回;函數有一定的資料類型,像其他的標準函數一樣,我們可以通過對函數名的調用返回函數值。
   預存程序和函數需要進行編譯,以排除語法錯誤,只有編譯通過才能調用。


首先得有表盒資料,那麼第一步就是建立表盒插入資料:

SQL> create table emp  2  (empno number,  3  ename varchar2(10),  4  sal number,  5  job varchar2(100)  6  ); Table created SQL> insert into emp values(1,'王一',10000,'軟體工程師'); 1 row inserted SQL> insert into emp values(2,'王二',8000,'攝影師'); 1 row inserted SQL> select * from emp;      EMPNO ENAME             SAL JOB---------- ---------- ---------- --------------------------------------------------------------------------------         1 王一          10000 軟體工程師         2 王二           8000 攝影師 SQL> 
現在叫我們查詢某個員工姓名,月薪和職位,那麼我們建立一個預存程序如下:

--out參數:查詢某個員工姓名,月薪和職位/*  思考:  1、查詢某個員工的所有資訊-->out參數太多?  2、查詢某個部門中所有員工的所有資訊-->out中返回集合?*/--刪除預存程序create or replace procedure queryempincome1(eno in number,                                           pename out varchar2,                                           psal out number,                                           pjob out varchar2)as                                          begin   --得到該員工的姓名、月薪和職位    select ename,sal,job into pename,psal,pjob from emp where empno=eno;                                    end;/                           

然後我們在eclipse裡面編寫Java代碼連結oracle資料庫和訪問預存程序,在控制台輸出指定id的使用者的基本資料:

package cn.edu.jdbc;import java.sql.CallableStatement;import java.sql.Connection;import oracle.jdbc.OracleTypes;import org.junit.Test;/** * create or replace procedure queryempinform(eno in number,                                           pename out varchar2,                                           psal out number,                                           pjob out varchar2) * @author wf * */public class TestProcedure {@Testpublic void testProcedure(){//{call <procedure-name[(<arg1>,<arg2>,<arh3>...)]>}String sql = "{call queryempincome1(?,?,?,?)}";Connection connection = null;CallableStatement call = null;try {//得到一個串連connection = JDBCUtils.getConnection();//通過串連建立輸出statementcall = connection.prepareCall(sql);//對於in(輸入)參數,要賦值call.setInt(1, 2);//為第一個預存程序的參數賦值為1表示查詢編號為1的員工資訊//對於out(輸出),需要申明//call.registerOutParameter(2, sqlType);call.registerOutParameter(2, OracleTypes.VARCHAR);//指定oracle的輸出參數類型call.registerOutParameter(3, OracleTypes.NUMBER);call.registerOutParameter(4, OracleTypes.VARCHAR);//執行調用call.execute();//取出結果String name = call.getString(2);Double sal = call.getDouble(3);String job = call.getString(4);System.out.println("姓名:"+name+"\t"+"薪水:"+sal+"\t"+"工作:"+job);} catch (Exception e) {e.printStackTrace();}}}



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

oracle預存程序--在應用程式中訪問預存程序程式完整舉例

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.