Oracle中Using用法 (轉)


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 from
2 emp e inner join dept d using(deptno);
 
 
EMPNO ENAME SAL DEPTNO DNAME
---------- ---------- ---------- ---------- --------------
7369 SMITH 800 20 RESEARCH
7499 ALLEN 1600 30 SALES
7521 WARD 1250 30 SALES
7566 JONES 2975 20 RESEARCH
7654 MARTIN 1250 30 SALES
7698 BLAKE 2850 30 SALES
7782 CLARK 2450 10 ACCOUNTING
7788 SCOTT 3000 20 RESEARCH
7839 KING 5000 10 ACCOUNTING
7844 TURNER 1500 30 SALES
7876 ADAMS 1100 20 RESEARCH
7900 JAMES 1800 30 SALES
7902 FORD 3000 20 RESEARCH
7934 MILLER 1300 10 ACCOUNTING
7935 XIAOXUE 5000 20 RESEARCH

已選擇 15 行。
如上述的結果與自然連接的結果相同。

使用using關鍵字簡化連接時,需要注意以下幾點:
1.使用emp表和dept表中的deptno列進行連接時,在using子句和select子句中,都不能爲deptno列指定表名或表別 名。
2.如果在連接查詢時使用了兩個表中相同的多個列,那麼久可以在using子句中指定多個列名,形式如下:



select... from table1 inner join table2
using(column1,column2)

上述的語句相當於下面的語句:




select... from table1 inner join table2
on table1.column1=table2.column2
and table1.column2=table2.column2;


如果對多個表進行檢索,就必須多次使用using關鍵字進行指定,形式如下:

 
select... from table1
inner join table2 using(column1)
inner join table3 using(column2);

上述的語句相當於下面的語句:





select... from table1,table2,table3
where table1.column1=table2.column1
and 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中提供了
Execute immediate語句來執行動態SQL,語法如下:
Excute immediate 動態SQL語句 using 綁定參數列表 returning into 輸出參數列表;

  對這一語句作如下說明:

  1) 動態SQL是指DDL和不確定的DML(即帶參數的DML)

  2) 綁定參數列表爲輸入參數列表,即其類型爲in類型,在運行時刻與動態SQL語句中的參數(實際上佔位符,可以理解爲函數裏面的形式參數)進行綁定。

  3) 輸出參數列表爲動態SQL語句執行後返回的參數列表

  4) 由於動態SQL是在運行時刻進行確定的,所以相對於靜態而言,其更多的會損失一些系統性能來換取其靈活性。

  爲了更好的說明其開發的過程,下面列舉一個實例:

  設數據庫的emp表,其數據爲如下:

ID       NAME   SALARY

100    Jacky        5600

101    Rose         3000

102    John         4500

要求:

  1.創建該表並輸入相應的數據。

  2.根據特定ID可以查詢到其姓名和薪水的信息。

  3.根據大於特定的薪水的查詢相應的員工信息。

  根據前面的要求,可以分別創建三個過程(均使用動態SQL)來實現: 

  過程一:

create or replace procedure create_table as
begin
execute immediate '
create table emp(id number,
name varchar2(10)
salary number; )'; --動態SQL爲DDL語句
insert into emp
values (100,'jacky',5600);
insert into emp
values (101,'rose',3000);
insert into emp
values (102,'john',4500);
end create_table;

過程二: 

create or replace procedure find_info(p_id number) as
v_name varchar2(10);
v_salary number;
begin
execute immediate '
select name,salary from emp
where id=:1'
using p_id

returning into v_name,v_salary;--動態SQL爲查詢語句
dbms_output.put_line(v_name ||'的收入爲:'||to_char(v_salary));
exception
when others then 
dbms_output.put_line('找不到相應數據');
end find_info;


發佈了9 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章