OracleにおけるUsingの使い方(転)

5046 ワード

http://www.2cto.com/database/201503/384694.html
oracleでusingキーワードを使う
sql/92標準はusingキーワードを使用して接続クエリを簡略化することができますが、次の二つの条件を満たすと検索するだけで、有効になります.
usingキーワードで簡略化する.
1.クエリーは等値接続が必要です.
2.等値接続中の列は同じ名前とデータタイプが必要です.
例えば、usingキーワードを使用すると、以下のようになります.select emptno,ename,sal,deptno,dname from emp e inner join dept d using(deptno);SQL> select e.empno,e.ename,e.sal,deptno,d.dname from2 emp e inner join dept d using(deptno); 
  EMPNO ENAME SAL DEPTNO DNAME---------- ---------- ---------- ---------- --------------7369 SMITH 80020RESEARCH7499 ALLEN 160030SALES7521 WARD 125030SALES7566 JONES 297520RESEARCH7654 MARTIN 125030SALES7698 BLAKE 285030SALES7782 CLARK 245010ACCOUNTING7788 SCOTT 300020RESEARCH7839 KING 500010ACCOUNTING7844 TURNER 150030SALES7876 ADAMS 110020RESEARCH7900 JAMES 180030SALES7902 FORD 300020RESEARCH7934 MILLER 130010ACCOUNTING7935 XIAOXUE 500020RESEARCH15行が選択されました
上記のような結果は自然接続の結果と同じです.
usingキーワードを使って接続を簡略化する場合、以下の点に注意する必要があります.
1.emp表とdept表のdeptの列を使って接続する場合、using子文とselect子文のいずれもdeptの列に表名または表の別名を指定することはできません.
2.クエリーに接続する際に、同じ複数の列を2つのテーブルに使用すると、長い間、usingサブルーチンで複数の列名を指定できます.形式は以下の通りです.select... from table1 inner join table2using(column1,column2)上記の語句は以下の語句に相当します.select... from table1 inner join table2on table1.column1=table2.column2and table1.column2=table2.column2;複数の表を検索する場合は、何度もusingキーワードを使用して指定しなければなりません.形式は以下の通りです.
  select... from table1inner join table2 using(column1) inner join table3 using(column2); の は の に します.select... from table1,table2,table3where table1.column1=table2.column1and table2.column2=table3.table2;
--------------------------------------------------------------------------------------------------------------------------------------------------------------
http://blog.csdn.net/robertkun/article/details/10562807
1. SQLSQLとダイナミックSQL
OracleコンパイルPL/SQLプログラムブロックは つの に けられています. つは (early binding)で、つまりSQL はプログラムコンパイルの に されています.ほとんどのコンパイル はこのタイプです.もう つは、ポスト・カスケード(late binding)、つまりSQL は、 でのみ され、 えば、クエリ がユーザ である 、OracleのSQLエンジンはコンパイル にこのプログラム を することができず、ユーザが のクエリを した にのみSQLエンジンに を うことができる. に、 SQLは のコンパイル を し、 SQLは のコンパイル を する.
では に SQLの について し、 に に したいくつかの を する.
 2.ダイナミックSQLプログラム
SQLコンパイルの を して、その な を しました. SQLは「 」なSQLである 、その にはそれなりの がある.Oracleでは、 SQLを するためにExecute immediate が されています.シンタックスは、Excute immediate SQL usingバインディングパラメータリストreturning into パラメータリストです.
この について のように します.
1) SQLとは、DDLと DML(すなわち、パラメータ きDML)を する.
2)バインディングパラメータのリストは パラメータのリストであり、すなわちそのタイプはinタイプであり、 と SQL のパラメータ( のプレースホルダは、 の パラメータとして されます)と けられています.
3) パラメータリストは、 SQL の に ってくるパラメータリストです.
4) SQLは で されるので、 に べて、システム の を うことが い.
プロセスをよりよく するために、 の を げます.
データベースのempテーブルを します.そのデータは の りです.
ID      NAME  SALARY
100   ジャック       5600
101   Rose        3000
102   ジョン        4500
:
1.テーブルを し、 データを します.
2. のIDに づいて、その と の が べられます.
3. の より きい に づいて する の を べます.
の に って、 SQLを して、 つのプロセスを に することができる. 
プロセス1:
create or replace procedure create utable asbeginnexecute immediate'create table emenp(id number,name varhar 2(10)salary number;;;;;;;;;;;;;;;;;;-- SQLはDDL insert into empvalues(100、'jacky'、5600)である.insert into empvalues(101、'rose'3000)insert into empvalues(102、'john's、4500)end create_テーブル
プロセス2: 
create or replace procedure find uinfo(puuid number)asv_name varrhar 2(10);v_.salary numberbeginnexecute immediate'select name,salary from epwhere id=:1'using p_idreturning into v_name,v_salary; SQLは dbms_out put.put_LINEの は「124」です.exceptionwhen others then dbms_out put.put_ライン('は データが つからない');end find_info;