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();
}
}