免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

Oracle動態SQL和靜態SQL比較

Oracle動態SQL和靜態SQL比較

創新互聯建站專注為客戶提供全方位的互聯網綜合服務,包含不限于成都網站制作、網站設計、銀州網絡推廣、重慶小程序開發公司、銀州網絡營銷、銀州企業策劃、銀州品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創新互聯建站為所有大學生創業者提供銀州建站搭建服務,24小時服務熱線:18982081108,官方網址:newbst.com

1.靜態SQLSQL與動態SQL
  Oracle編譯PL/SQL程序塊分為兩個種:其一為前期聯編(early binding),即SQL語句在程序編譯期間就已經確定,大多數的編譯情況屬于這種類型;另外一種是后期聯編(late binding),即SQL語句只有在運行階段才能建立,例如當查詢條件為用戶輸入時,那么Oracle的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是在運行時刻進行確定的,所以相對于靜態而言,其更多的會損失一些系統性能來換取其靈活性。

 為了更好的說明其開發的過程,下面列舉一個實例:
  設數據庫的他表,其數據為如下:

ID

NAME

SAL

10

scott

3000

20

tom

5000

30

jerry

4500

要求:
  1.創建該表并輸入相應的數據。
  2.根據特定ID可以查詢到其姓名和薪水的信息。
  3.根據大于特定的薪水的查詢相應的員工信息。
  根據前面的要求,可以分別創建三個過程(均使用動態SQL)來實現:

過程一:(創建表并插入數據)

18:16:27 SCOTT@ prod>create or replace procedure p1 as
18:16:36   2  flag number; 
18:16:36   3  begin
18:16:36   4  select count(*) into flag from all_tables where table_name='T1';
18:16:36   5  if (flag=0) then 
18:16:36   6  execute immediate 'create table t1(id number,name varchar2(10),sal number)';
18:16:36   7  else
18:16:36   8  insert into t1 values (10,'scott',3000);
18:16:36   9  insert into t1 values (20,'tom',5000);
18:16:37  10  insert into t1 values (30,'jerry',4500);
18:16:37  11  end if;
18:16:37  12  end p1;
18:16:38  13  /
Procedure created.
Elapsed: 00:00:00.20
18:16:40 SCOTT@ prod>exec p1;
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.18
18:16:47 SCOTT@ prod>select * from t1;
        ID NAME              SAL
---------- ---------- ----------
        10 scott            3000
        20 tom              5000
        30 jerry            4500
Elapsed: 00:00:00.01
18:16:52 SCOTT@ prod>

過程二:(按id查詢用戶信息)

18:40:24 SCOTT@ prod>create or replace procedure p2 (p_id number) as
18:40:26   2   v_name varchar2(10);
18:40:26   3   v_sal number;
18:40:26   4   begin
18:40:26   5   execute immediate 'select name,sal  from t1  where id=:1' into v_name,v_sal using p_id;
18:40:26   6   dbms_output.put_line(v_name ||' Salary is: '||to_char(v_sal));
18:40:26   7    exception
18:40:26   8   when others then
18:40:26   9   dbms_output.put_line('No Data Found');
18:40:26  10   end p2;
18:40:26  11   /
Procedure created.
Elapsed: 00:00:00.07
18:40:27 SCOTT@ prod>exec p2(10);
scott Salary is: 3000
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.01
18:40:32 SCOTT@ prod>exec p2(20);
tom Salary is: 5000
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.02
18:40:40 SCOTT@ prod>exec p2(30);
jerry Salary is: 4500
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.02
18:40:45 SCOTT@ prod>

過程三:(查詢薪水大于某個值的員工)

18:48:59 SCOTT@ prod>create or replace procedure p3(p_sal number) as
18:50:55   2  r_t1 t1%rowtype;
18:50:55   3  type c_type is ref cursor;
18:50:56   4  c1 c_type;
18:50:56   5  begin
18:50:56   6  open c1 for '
18:50:56   7  select * from t1
18:50:56   8  where sal >:1'
18:50:56   9  using p_sal;
18:50:56  10  loop
18:50:56  11  fetch c1 into r_t1;
18:50:56  12  exit when c1%notfound;
18:50:56  13  dbms_output.put_line('Salary higher '||to_char(p_sal)||' Name is:');
18:50:56  14  dbms_output.put_line('ID is ' ||to_char(r_t1.id)||' Name is: '||r_t1.name);
18:50:56  15  end loop;
18:50:56  16  close c1;
18:50:56  17  end p3;
18:50:57  18  /
Procedure created.
Elapsed: 00:00:00.12
18:50:58 SCOTT@ prod>exec p3(2000);
Salary higher 2000 Name is:
ID is 10 Name is: scott
Salary higher 2000 Name is:
ID is 20 Name is: tom
Salary higher 2000 Name is:
ID is 30 Name is: jerry
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.02
18:51:15 SCOTT@ prod>

注意:在過程二中的動態SQL語句使用了占位符“:1“,其實它相當于函數的形式參數,使用”:“作為前綴,然后使用using語句將p_id在運行時刻將:1給替換掉,這里p_id相當于函數里的實參。另外過程三中打開的游標為動態游標,它也屬于動態SQL的范疇,其整個編譯和開發的過程與execute immediate執行的過程很類似。

 


網頁名稱:Oracle動態SQL和靜態SQL比較
標題鏈接:http://newbst.com/article38/jhdhpp.html

成都網站建設公司_創新互聯,為您提供營銷型網站建設網站設計公司網頁設計公司網站收錄ChatGPT網站策劃

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網站建設公司