Javaの、PL / SQLストアド・ファンクションおよびOracleのストアドプロシージャを呼び出します

1.1.1準備が
テーブルを作成し
    、テストテーブル学校を作成---
        CREATE TABLE学校(
            IDナンバー、 -上記のID学校
            NAME VARCHAR2(30)---学校名
        );
        ---追加データは、
        学校の値への挿入( 1、 '北京');
        INSERT INTOスクール値(2、 '南京大学');
        INSERT INTOスクール値(1、 '東大');
        COMMIT;
データベースに接続する・書き込みJavaコードは、接続オブジェクトの接続を取得します

   public class OracleUtil {
    // 加载Oracle驱动
    static {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
     }
    // 获取数据库连接
    public static Connection getConnection() throws SQLException {
        Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@iP:1521:orcl", "system",
                "密码");
        return connection;
    }
    }

1.1 --- ---ストレージ機能を
*
1.ストレージ機能とは何である

また、カスタム関数として知られているストレージ機能、。あなたは、1つ以上のパラメータを受け取り、結果を返すことがあります。関数の中で、我々は、PL / SQLの処理ロジックを使用することができます。

関数の構文構造を保存する
    CREATE [OR REPLACE] FUNCTION関数名
        (パラメータ名...、パラメータの型[中|アウト|アウト])
        RETURNの
        結果変数のデータ型は、
        IS
        宣言セクション;
        BEGIN
        ロジック部;
        RETURNの
        アウトカム変数;
        [例外
        例外処理部
       END;
。1.1.1は、関数を作成します
。・ここでは単にデータ値が返されることがあります返すVARCHAR2カーソル、表...
        。---アドレスIDを照会関数名のアドレスを作成
        (CREATE OR fn_getName機能をREPLACE SID NUMBER)
        戻り値の戻り型VARCHAR2 ---
        AS
        r_name VARCHAR2(30); ---変数は宣言
        BEGIN
          SELECT名前は学校WHERE ID = SID FROM INTO r_name; ---はr_nameの中に保存されている名前照会
          RETURNのr_nameを; -戻り値はr_name
        ENDを、
1.1.2 PL / SQL。 Oracleの関数呼び出し
     --- PL / SQLを渡す機能、パラメータを使用してプロシージャを呼び出す2 = ID
        SELECT fn_getName(2)からデュアル学校、
Javaコードは、関数オラクルを呼び出す
  `
 / *
     
 呼び出し関数のOracle
     
     
SID @param
     * /
    公共ボイド静的getenamefun (int型のSID){
        String型のSNAME;
        のjava.sql.ConnectionでCONN = NULL;
        のjava.sql.PreparedStatementのstmt = nullを
        文字列のSQLが= "?呼んfn_getName = {}(?)"; //呼び出され
        たCallableStatementの楽しさ= NULL;
        {試みる
            コネチカットOracleUtil.getConnection =();
            ファン= conn.prepareCall(SQL);
            fun.setInt(2、SID);
            fun.registerOutParameter(1、のTypes.VARCHAR。); //引数タイプ発信レジスタ
            fun.execute( );
            SNAME = fun.getString(1); //値が結果によって返さ取得
            するSystem.out.println(SNAME);
        }キャッチ(のSQLException E){
            e.printStackTrace();
        }
    }

1.2. ——-存储过程——-
· 1.什么是存储过程
存储过程是被命名的PL/SQL块,存储于数据库中,是数据库对象的一种。应用程序可以调用存储过程,执行相应的逻辑。
存储过程与存储函数都可以封装一定的业务逻辑并返回结果,存在区别如 
下:
1.存储函数中有返回值,且必须返回;而存储过程没有返回值,可以通过 
传出参数返回多个值。
2.存储函数可以在select语句中直接使用,而存储过程不能。过程多数是 
被应用程序所调用。
3.存储函数一般都是封装一个查询结果,而存储过程一般都封装一段事务代码
存储函数语法结构
        CREATE [ OR REPLACE ] PROCEDURE 存储过程名称(参数名 类型,
        参数名 类型,参数名 类型...)
        IS|AS
        变量声明部分;
        BEGIN
        逻辑部分
        [EXCEPTION
        异常处理部分
        END;
注意:
1.参数只指定类型,不指定长度
2.过程参数的三种模式: 
IN :传入参数(默认) 
OUT :传出参数主要用于返回程序运行结果 
IN OUT :传入传出参数
1.3. 一:不带传出参数

またはプロシージャは、(CREATE REPLACE pro_insert
    ID番号、
    NAME VARCHAR2 ----(VARCHAR(30)の長さなしに、書き込むことができないことに留意されたい)
    )
    AS
    BEGIN
     ; INTO学校値(ID、NAME)INSERTを
    END。

1.3.1. PL/SQL调用过程
   CALL pro_insert(4,'郑州大学');
· 1
1.3.2. java代码调用oracle函数

静的な無効callPrのパブリック(){
        のjava.sql.Connectionコネティカット= NULL;
        のjava.sql.PreparedStatementのstmtは= nullを
        試し{
            コネティカットOracleUtil.getConnection =();
            stmtは= conn.prepareCall(「コールpro_insert {(、)?? } "); //ストアドプロシージャをキーワードに設けられている呼び出す
            。stmt.setInt(1 ,. 4); //最初の入力パラメータ設定
            stmt.setInt(2、"鄭州大学「); //第2の入力を設定しますパラメータ
            でstmt.execute(); //実行
        }キャッチ(のSQLException E){
            e.printStackTrace();
        }
    }

1.4. 二:带传出参数
---.  带传出参数
  ```
  CREATE OR REPLACE PROCEDURE pro_getCount(s_name VARCHAR2,s_count OUT NUMBER)
    AS
    BEGIN
    SELECT COUNT(*) INTO s_count FROM school
    WHERE name LIKE '%'||s_name||'%';
    END;

。1.4.1 PL / SQLプロシージャを呼び出す
--- PL / SQL呼び出し
   `` `
DECLARE
    s_countナンバーを; -来た変数のパラメータを定義し
    始める
    pro_getCount( '大学'、s_count); ---実行
    DBMS_OUTPUT.PUT_LINE( 「クエリ結果は、数:」|| s_count); ---結果の印刷
    終了を、

1.4.2. java代码调用oracle函数

静的な無効pro_Gountパブリック(文字列名){
        のjava.sql.Connectionコネティカット= NULL;
        java.sql.CallableStatementのは、stmtは=ヌルを設定します。
        試し{
            コネティカットDaoUtil.getConnection =();
            stmtは= conn.prepareCall(「コールpro_getCount {(、? ?)} "); //キーワードなどのストアド・プロシージャ・コールを設定する。
            stmt.setString(1、"大学「); //は、第1の入力パラメータセット
            stmt.registerOutParameter(2、OracleTypes.NUMBER)は、最初に設定//二つの入力パラメータ
            でstmt.executeを(); //行う。
            //加工した後、プレースホルダ列は、それに対応する
            整数COUNT = stmt.getInt(2)
            のSystem.out.println(「クエリ結果「+ COUNT); // 4
        }キャッチ(のSQLException E){
            e.printStackTrace();
        }
    }

1.5. 二:带传出参数
---- 返回值为游标

    OR PROCEDURE pro_cursor REPLACE(SYS_REFCURSOR OUTをs_cur)CREATE
    AS
    BEGIN
      FORスクール* FROM SELECT s_cur OPENし;
    END;
1.5.1 PL / SQLプロシージャを呼び出します。
DECLARE
     SYS_REFCURSOR s_cur; -発信定義された変数パラメータ
     s_row学校%のROWTYPEを; -発信s_rowに割り当てられたパラメータ
    始める  
    pro_cursor(s_curを); -実行
    ループ-ループの結果は
    s_row INTO s_curをFETCH;
    EXIT s_cur%のNOTFOUND;
    DBMS_OUTPUT.PUT_LINE(s_row.name);   
    エンドループ;   
    END;

1.5.2. java代码调用oracle函数

  / *
     
  リターン結果カーソル
     * /
    パブリック静的ボイドpro_cur(){
        のjava.sql.Connectionコネティカット= NULL;
        java.sql.CallableStatementのは、stmtは=ヌルを設定します。
        試し{
            コネティカットDaoUtil.getConnection =();
            stmtは= conn.prepareCall( " {pro_cursorを呼び出す(?)} " ); //は、 ストアドプロシージャがキーワードのために提供される呼び出し
            stmt.registerOutParameter(1、OracleTypes.CURSOR); //最初の入力パラメータセット
            でstmt.executeを(); //行う。
            //加工後、プレースホルダ列は、それに対応する
            ;のResultSetたresultSet =(ResultSetの)stmt.getObject(1)
            一方、(ResultSet.next()){
                文字列ID = resultSet.getString( "ID")。
                文字列名= resultSet.getString( "名前" );
                System.out.println( "ID" + ID + "学校名" +名);
            }
        }キャッチ(のSQLException E){
            e.printStackTrace();
        }
    }

おすすめ

転載: blog.51cto.com/14473726/2440759