[開発][SQL] SELECT INTO statements

アプリからホスト変数やホスト表現でSQL構文に埋め込んでパラメータを渡せる

Host Variables
ホスト変数にはIN、OUT、INOUTの3種類ある

 String name = "SMITH";
 double salary = 25000.0;
 ...
 #sql { UPDATE emp SET sal = :salary WHERE ename = :name };

Host Expressions
Java組む感覚で使える

 float balance = 12500.0;
 float minpmtratio = 0.05
 ...
 #sql { UPDATE creditacct SET minpayment = :(balance * minpmtratio)
      WHERE acctnum = 537845 };

Single-Row Query Results: SELECT INTO Statements
When only a single row of data is being returned, SQLJ enables you to assign selected items directly to Java host expressions inside SQL syntax. This is done using the SELECT INTO statement.
戻り値がデータ1行の場合のみ、
SQLJでは、SELECT INTO文を使えば選択項目をSQLJ構文内のJavaホスト式(INTOリスト)に直接代入出来る
singleton select照会では、SELECT INTO構文の使用でネットワーク・アクティビティーを軽減することができる
QUERY結果が0行や2行以上の場合は例外になる

 String name;
 Date hiredate;
 #sql { SELECT emp_name, hire_date INTO :name, :hiredate FROM emp
      WHERE emp_num=28959 };

Multi-Row Query Results--SQLJ Iterators
Oracle SQLJ offers extensions that allow you to use SQLJ iterators and result sets in the following ways:
as OUT host variables in executable SQL statements
as INTO-list targets, such as in a SELECT INTO statement
as a return type from a stored function call
as column types in iterator declarations (essentially, nested iterators)

SELECT INTOのOUTホスト変数としてのイテレータの使用の例
名前付きイテレータを出力ホスト変数として使用し、SELECT INTO文を介してデータを取得できる
INTOリスト内のホスト変数のデフォルトは、OUT

 ...
 ENameIter enamesIter;
 String deptname;
 ...
 
 #sql { SELECT dname, cursor
      (SELECT ename FROM emp WHERE deptno = dept.deptno)
      INTO :deptname, :enamesIter FROM dept WHERE deptno = 20 };
 
 System.out.println(deptname);
 while (enamesIter.next())
 {
   System.out.println(enamesIter.ename());
 }
 enamesIter.close();
 ...
大抵の場合、
外部のSELECT内にある1行を取り出すときはSELECT INTOを使用した方が、
ネストされたイテレータよりも便利
また、
ネストされたイテレータを使用した場合は、
データを処理して外部のSELECT中にある行数を求める必要があるのに対し、
SELECT INTOを使用すると、1行のみで済む


ref
Java Variables in SQL Operations--Host Variables and Expressions
http://tinman.cs.gsu.edu/~raj/sqljdoc/87basic6.htm#1018213
単一行の問合せ結果: SELECT INTO 文
http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/java.111/E05723-01/blangfea.htm#i1006673
Single-Row Query Results: SELECT INTO Statements
http://docs.oracle.com/cd/E18283_01/java.112/e10590/blangfea.htm#i1006673
Multi-Row Query Results--SQLJ Iterators
http://docs.oracle.com/cd/A97339_01/doc/java.816/a81360/blangfe5.htm
ホスト変数としてのイテレータおよび結果セットの使用
http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/java.111/E05723-01/blangfea.htm#i1007245
2 Introduction to SQLJ
http://docs.oracle.com/cd/B28359_01/java.111/b31227/overview.htm
DB2 V8 Javaアプリケーション用にSQLJを検討する
http://www.ibm.com/developerworks/jp/data/library/dataserver/techdoc/javasqlj.html
SQLJ アプリケーションでのデータの検索
http://pic.dhe.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.apdv.java.doc%2Fsrc%2Ftpc%2Fimjcc_cjvsjrtv.html
DB2 10 for z/OS アプリケーション・
プログラミングガイド
およびリファレンス(Java 用)>SQLJ アプリケーションでのデータの検索
http://publibfp.dhe.ibm.com/epubs/pdf/a8842120.pdf

tag : SQLJ SELECT INTO

2012-07-20 00:20 : 開発 : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud