日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle里的查询转换

發布時間:2024/10/12 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle里的查询转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

oracle里的查詢轉換的作用

??Oracle里的查詢轉換,有稱為查詢改寫,指oracle在執行目標sql時可能會做等價改寫,目的是為了更高效的執行目標sql

??10g及其以后的版本中,oracle會對某些類型的查詢轉換(比如子查詢展開、復雜視圖合并等)計算成本,oracle會分別計算查詢轉換后的

? 等價改寫的sql的成本和原始sql的成本,如果改寫后的sql的成本低于原始sql的成本,oracle才會對目標sql執行查詢轉換。

子查詢展開in、exists。。

??指優化器不在將子查詢當做一個獨立的單元來處理,而是將該子查詢轉為它自身和外部查詢之間的等價的表連接,將子查詢拆開

將子查詢中的表、視圖從子查詢中拿出來,然后后外部查詢的表、視圖做連接,或者會把該子查詢轉換為一個內嵌視圖inline view)然后再和外部查詢的表、視圖做連接(子查詢展開

Oracle子查詢前的where條件是以下

single-row(=,>,<,<=,>=,<>)

exists

not exists

in

not in

any all

1 子查詢展開

?

SQL> select t1.col1,t1.col2 from t1 where t1.col2 in(select col2 from t2 where t2.col3='B1'); Elapsed: 00:00:00.36 Execution Plan ---------------------------------------------------------- Plan hash value: 2894408441 --------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 10 | 4 (0)| 00:00:01 | | 1 | NESTED LOOPS SEMI | | 1 | 10 | 4 (0)| 00:00:01 | | 2 | TABLE ACCESS FULL | T1 | 3 | 15 | 3 (0)| 00:00:01 | |* 3 | TABLE ACCESS BY INDEX ROWID| T2 | 1 | 5 | 1 (0)| 00:00:01 | |* 4 | INDEX RANGE SCAN | IDX_T2 | 1 | | 0 (0)| 00:00:01 | --------------------------------------------------------------------- Predicate Information (identified by operation id): ---------------------------------------------------3 - filter("T2"."COL3"='B1')4 - access("T1"."COL2"="COL2") 轉換為對應的半連接,找到滿足的記錄,馬上停止掃描

?

2 不展開/*+ no_unnest */

SQL> select t1.col1,t1.col2 from t1 where t1.col2 in(select /*+ no_unnest */ col2 from t2 where t2.c ol3='B1'); Elapsed: 00:00:00.01 Execution Plan ---------------------------------------------------------- Plan hash value: 3615181094 --------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 5 | 6 (0)| 00:00:01 | |* 1 | FILTER | | | | | | | 2 | TABLE ACCESS FULL | T1 | 3 | 15 | 3 (0)| 00:00:01 | |* 3 | TABLE ACCESS BY INDEX ROWID| T2 | 1 | 5 | 2 (0)| 00:00:01 | |* 4 | INDEX RANGE SCAN | IDX_T2 | 1 | | 1 (0)| 00:00:01 | --------------------------------------------------------------------- Predicate Information (identified by operation id): ---------------------------------------------------1 - filter( EXISTS (SELECT /*+ NO_UNNEST */ 0 FROM "T2" "T2" WHERE"COL2"=:B1 AND "T2"."COL3"='B1'))3 - filter("T2"."COL3"='B1')4 - access("COL2"=:B1) 不能展開的子查詢通常是目標sql的執行計劃的最后一步才會被執行,并且會走filter SQL> select tab1.col1,tab1.col2 from tab1 where tab1.col2 not in(select col2 from tab2 where tab2.col3='B1' and tab1.col2=tab2.col2); 7 rows selected. Execution Plan ---------------------------------------------------------- Plan hash value: 3181642956 --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 8 | 64 | 15 (0)| 00:00:01 | |* 1 | FILTER | | | | | | | 2 | TABLE ACCESS FULL| TAB1 | 10 | 80 | 3 (0)| 00:00:01 | |* 3 | TABLE ACCESS FULL| TAB2 | 1 | 6 | 3 (0)| 00:00:01 | --------------------------------------------------------------------------- Predicate Information (identified by operation id): ---------------------------------------------------1 - filter( NOT EXISTS (SELECT /*+ */ 0 FROM "TAB2" "TAB2" WHERE"TAB2"."COL3"='B1' AND "TAB2"."COL2"=:B1 AND LNNVL("COL2"<>:B2)))3 - filter("TAB2"."COL3"='B1' AND "TAB2"."COL2"=:B1 ANDLNNVL("COL2"<>:B2))SQL> select tab1.col1,tab1.col2 from tab1 where not exists(select 1 from tab2 where tab2.col3='B1' and tab1.col2=tab2.col2); Execution Plan ---------------------------------------------------------- Plan hash value: 949155623 --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 8 | 112 | 7 (15)| 00:00:01 | |* 1 | HASH JOIN ANTI | | 8 | 112 | 7 (15)| 00:00:01 | | 2 | TABLE ACCESS FULL| TAB1 | 10 | 80 | 3 (0)| 00:00:01 | |* 3 | TABLE ACCESS FULL| TAB2 | 1 | 6 | 3 (0)| 00:00:01 | --------------------------------------------------------------------- Predicate Information (identified by operation id): ---------------------------------------------------1 - access("TAB1"."COL2"="TAB2"."COL2")3 - filter("TAB2"."COL3"='B1')

例?3 子查詢合并成一個視圖VW_NSO_1

SQL> select area_id,area_name,country_code,iso_code2 from provider_area where area_id in ( 3 select distinct area_id from PROVIDER_PREFIX p4 where exists(select 1 from IDD_Channel i where 5 p.area_code = SUBSTR (I.Virtual_No, 1, LENGTH (p.area_code))6 AND I.Status = 'IDLE'7 AND I.DDI_Owner = 'GLOBALROAM'8 AND I.Reserved_Provider_ID = 'GLOBALROAM'9 AND I.Provider_ID = 'GLOBALROAM'))10 and provider_id= 'GLOBALROAM'; Elapsed: 00:00:00.03 Execution Plan ---------------------------------------------------------- Plan hash value: 3848479730 --------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 46 | 12 (9)| 00:00:01 | | 1 | NESTED LOOPS | | 1 | 46 | 12 (9)| 00:00:01 | | 2 | VIEW | VW_NSO_1 | 1 | 13 | 10 (0)| 00:00:01 | | 3 | HASH UNIQUE | | 1 | 47 | | | | 4 | NESTED LOOPS | | 1 | 47 | 10 (0)| 00:00:01 | |* 5 | TABLE ACCESS FULL | IDD_CHANNEL | 1 | 37 | 5 (0)| 00:00:01 | |* 6 | TABLE ACCESS FULL | PROVIDER_PREFIX | 1 | 10 | 5 (0)| 00:00:01 | | 7 | TABLE ACCESS BY INDEX ROWID| PROVIDER_AREA | 1 | 33 | 1 (0)| 00:00:01 | |* 8 | INDEX UNIQUE SCAN | PROVIDER_AREA_UK | 1 | | 0 (0)| 00:00:01 | --------------------------------------------------------------------- Predicate Information (identified by operation id): ---------------------------------------------------5 - filter("I"."DDI_OWNER"='GLOBALROAM' AND "I"."RESERVED_PROVIDER_ID"='GLOBALROAM'AND "I"."PROVIDER_ID"='GLOBALROAM' AND "I"."STATUS"='IDLE')6 - filter("P"."AREA_CODE"=SUBSTR("I"."VIRTUAL_NO",1,LENGTH("P"."AREA_CODE")))8 - access("PROVIDER_ID"='GLOBALROAM' AND "AREA_ID"="$nso_col_1")

能否做子查詢展開取決如下2個條件

1 子查詢展開所對應的等價改寫sql和原sql在語義上一定要是完全等價的。

2 對于不拆開的子查詢會把它轉換為一個內嵌視圖的子查詢展開

對于第一種情況,Oracle 10g及以后的版本中,Oracle也不會考慮子查詢展開的成本。及Oracle都會做子查詢展開

SQL> select t1.ename,t1.deptno from emp t1 where t1.deptno in (select t2.deptno from dept t2 where t2.loc='hongquan'); no rows selected Execution Plan ---------------------------------------------------------- Plan hash value: 351108634 --------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ---------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 5 | 105 | 4 (0)| 00:00:01 | | 1 | NESTED LOOPS | | 5 | 105 | 4 (0)| 00:00:01 | |* 2 | TABLE ACCESS FULL | EMP | 14 | 140 | 3 (0)| 00:00:01 | |* 3 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 11 | 1 (0)| 00:00:01 | |* 4 | INDEX UNIQUE SCAN | PK_DEPT | 1 | | 0 (0)| 00:00:01 | --------------------------------------------------------------------- Predicate Information (identified by operation id): ---------------------------------------------------2 - filter("T1"."DEPTNO" IS NOT NULL)3 - filter("T2"."LOC"='hongquan')4 - access("T1"."DEPTNO"="T2"."DEPTNO") 將表dept,emp做nl方式連接

3 視圖合并view merging

??不將視圖作為單獨的處理單元,將視圖的基表拿出來與外部查詢的表合并,不會再有視圖的出現

1 簡單的視圖合并---沒有出現view

SQL> select emp.ename,emp.empno from2 emp, EMP_MGR_VIEW e3 where emp.empno=e.empno; Elapsed: 00:00:00.01 Execution Plan ---------------------------------------------------------- Plan hash value: 1225002481 --------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 3 | 69 | 3 (0)| 00:00:01 | |* 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 12 | 1 (0)| 00:00:01 | | 2 | NESTED LOOPS | | 3 | 69 | 3 (0)| 00:00:01 | | 3 | TABLE ACCESS FULL | EMP | 14 | 154 | 2 (0)| 00:00:01 | |* 4 | INDEX RANGE SCAN | INDEX_EMP | 3 | | 0 (0)| 00:00:01 | ---------------------------------------------------------------------1 - filter("EMP"."EMPNO"="EMPNO")4 - access("JOB"='MANAGER')2 不進行視圖合并/*+ no_merge(e)*/ SQL> select /*+ no_merge(e)*/emp.ename,emp.empno from2 emp, EMP_MGR_VIEW e3 where emp.empno=e.empno; Elapsed: 00:00:00.01 Execution Plan ---------------------------------------------------------- Plan hash value: 3750149094 --------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 3 | 72 | 5 (20)| 00:00:01 | |* 1 | HASH JOIN | | 3 | 72 | 5 (20)| 00:00:01 | | 2 | VIEW | EMP_MGR_VIEW | 3 | 39 | 2 (0)| 00:00:01 | |* 3 | TABLE ACCESS FULL| EMP | 3 | 36 | 2 (0)| 00:00:01 | | 4 | TABLE ACCESS FULL | EMP | 14 | 154 | 2 (0)| 00:00:01 | --------------------------------------------------------------------- Predicate Information (identified by operation id): ---------------------------------------------------1 - access("EMP"."EMPNO"="E"."EMPNO")3 - filter("JOB"='MANAGER') /*+ MERGE(VIEW) */ CARDINALITY(T1 100) 進行簡單的視圖合并,該視圖的視圖定義不能包含以下集合運算符(unionunion all,minus,intersect) connect by字句 rownum

2外連接視圖合并

Outer join view merging,針對那些使用了外連接,以及所帶視圖的視圖定義sql語句中不含distinct,group by 等聚合函數的目標sql的視圖合并

??外連接視圖合并的通用限制,該視圖被作為外連接的驅動表,或者該視圖定義的sql語句中只包含一個表

?

?

SQL> select emp.ename,emp.empno from2 emp, EMP_MGR_VIEW e3 where emp.empno(+)=e.empno;Elapsed: 00:00:00.01 Execution Plan ---------------------------------------------------------- Plan hash value: 2341341676 --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 3 | 69 | 5 (20)| 00:00:01 | |* 1 | HASH JOIN OUTER | | 3 | 69 | 5 (20)| 00:00:01 | |* 2 | TABLE ACCESS FULL| EMP | 3 | 36 | 2 (0)| 00:00:01 | | 3 | TABLE ACCESS FULL| EMP | 14 | 154 | 2 (0)| 00:00:01 | --------------------------------------------------------------------------- Predicate Information (identified by operation id): ---------------------------------------------------1 - access("EMP"."EMPNO"(+)="EMPNO")2 - filter("JOB"='MANAGER') SQL> select emp.ename,emp.empno from2 emp, EMP_MGR_VIEW e3 where emp.empno=e.empno(+);14 rows selected.Elapsed: 00:00:00.03Execution Plan ---------------------------------------------------------- Plan hash value: 1264059372------------------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 14 | 322 | 3 (0)| 00:00:01 | | 1 | NESTED LOOPS OUTER | | 14 | 322 | 3 (0)| 00:00:01 | | 2 | TABLE ACCESS FULL | EMP | 14 | 154 | 2 (0)| 00:00:01 | |* 3 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 12 | 1 (0)| 00:00:01 | |* 4 | INDEX RANGE SCAN | INDEX_EMP | 3 | | 0 (0)| 00:00:01 | --------------------------------------------------------------------- Predicate Information (identified by operation id): ---------------------------------------------------3 - filter("EMP"."EMPNO"="EMPNO"(+))4 - access("JOB"(+)='MANAGER')

?

3復雜視圖的合并

??復雜視圖的合并會推遲group by,distinct操作,所以不一定能帶來效率的提升

4 連接謂詞推入---視圖

Join predicate pushdown,優化處理帶視圖的另一個優化手段,會把視圖當做一個獨立的單元,但優化器會把處于該視圖外部查詢中和該視圖的連接條件推入到該視圖的定義sql語句內部,為了能使用上基表的index

Oracle僅僅支持如下類型的視圖做謂詞推入

視圖定義sql語句中包含union all、union

視圖定義sql包含distinct

視圖定義sql包含group by視圖

和外部查詢之間的連接類型是外連接

和外部查詢之間的連接類型是反連接

和外部查詢之間的連接類型是半連接

create table emp1 as select * from empcreate table emp2 as select * from empcreate index emp1_idx on emp1(empno)create index emp2_idx on emp2(empno)create view emp_view as select emp1.empno as empno1 from emp1;create view emp_view_union as select emp1.empno as empno1 from emp1 union all select emp2.empno as empno1 from emp2;SQL> select /*+ no_merge(emp_view)*/ emp.empno2 from emp,emp_view3 where emp.empno=emp_view.empno1(+)4 and emp.ename='FORD'; Elapsed: 00:00:00.01 Execution Plan ---------------------------------------------------------- Plan hash value: 1890544608 --------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 19 | 3 (0)| 00:00:01 | | 1 | NESTED LOOPS OUTER | | 1 | 19 | 3 (0)| 00:00:01 | |* 2 | TABLE ACCESS FULL | EMP | 1 | 15 | 2 (0)| 00:00:01 | | 3 | VIEW PUSHED PREDICATE | EMP_VIEW | 1 | 4 | 1 (0)| 00:00:01 | |* 4 | INDEX RANGE SCAN | EMP1_IDX | 1 | 26 | 1 (0)| 00:00:01 | --------------------------------------------------------------------- Predicate Information (identified by operation id): ---------------------------------------------------2 - filter("EMP"."ENAME"='FORD')4 - access("EMP1"."EMPNO"="EMP"."EMPNO") Note ------ dynamic sampling used for this statement2 沒有做謂詞推入 SQL> select emp.empno2 from emp,emp_view_union3 where emp.empno=emp_view_union.empno14 and emp.ename='FORD'; Elapsed: 00:00:00.01 Execution Plan ---------------------------------------------------------- Plan hash value: 2081391209 --------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 24 | 3 (0)| 00:00:01 | |* 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 11 | 1 (0)| 00:00:01 | | 2 | NESTED LOOPS | | 1 | 24 | 3 (0)| 00:00:01 | | 3 | VIEW | EMP_VIEW_UNION | 28 | 364 | 2 (0)| 00:00:01 | | 4 | UNION-ALL | | | | | | | 5 | INDEX FULL SCAN | EMP1_IDX | 14 | 182 | 1 (0)| 00:00:01 | | 6 | INDEX FULL SCAN | EMP2_IDX | 14 | 182 | 1 (0)| 00:00:01 | |* 7 | INDEX RANGE SCAN | EMP_IDX | 1 | | 0 (0)| 00:00:01 | --------------------------------------------------------------------- Predicate Information (identified by operation id): ---------------------------------------------------1 - filter("EMP"."EMPNO"="EMP_VIEW_UNION"."EMPNO1")7 - access("EMP"."ENAME"='FORD') 3 做了謂詞推入 SQL> select /*+ push_pred(emp_view_union) */emp.empno2 from emp,emp_view_union3 where emp.empno=emp_view_union.empno14 and emp.ename='FORD'; Elapsed: 00:00:00.03 Execution Plan ---------------------------------------------------------- Plan hash value: 765440681 --------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | 31 | 4 (0)| 00:00:01 | | 1 | NESTED LOOPS | | 1 | 31 | 4 (0)| 00:00:01 | |* 2 | TABLE ACCESS FULL | EMP | 1 | 23 | 2 (0)| 00:00:01 | | 3 | VIEW | EMP_VIEW_UNION | 1 | 8 | 2 (0)| 00:00:01 | | 4 | UNION ALL PUSHED PREDICATE | | | | | | |* 5 | INDEX RANGE SCAN | EMP1_IDX | 1 | 26 | 1 (0)| 00:00:01 | |* 6 | INDEX RANGE SCAN | EMP2_IDX | 1 | 26 | 1 (0)| 00:00:01 | Predicate Information (identified by operation id): ---------------------------------------------------2 - filter("EMP"."ENAME"='FORD')5 - access("EMP1"."EMPNO"="EMP"."EMPNO")6 - access("EMP2"."EMPNO"="EMP"."EMPNO")

5 連接因式分解union all

??11gr2被引入,優化器處理帶union-all的目標的sql 的一種優化手段,把多個union的相同結果提取出來為一個結果集,然后再和原union all中剩下的部分表做連接

?

6表擴展partition table

??優化器針對分區表的目標sql的一種優化手段,當指定目標sql中的分區表的某個局部分區索引由于某種原因在某些分區上變得不可用(unusable),

? oracle將目標sql等級的改寫成按分區union all的形式,不可用index union all可用index

?11g r2引入

?

?對同一個目標sql而言,oracle可能會采用不止一種的查詢轉換手段

7 表移除

??是優化器處理帶多表連接的目標的sql的一種優化手段,使用表與表之間通過外鍵相連的情形,還使用于表與表之間外連接的情況

SQL> select ename from emp,dept2 where emp.deptno=dept.deptno; ------執行計劃沒有選擇dept表,列deptno的屬性 is not null 該列有一個fk 14 rows selected.Execution Plan ---------------------------------------------------------- Plan hash value: 3956160932-------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 14 | 98 | 3 (0)| 00:00:01 | |* 1 | TABLE ACCESS FULL| EMP | 14 | 98 | 3 (0)| 00:00:01 | -------------------------------------------------------------------------- Predicate Information (identified by operation id): ---------------------------------------------------1 - filter("EMP"."DEPTNO" IS NOT NULL)

8 oracle如何處理sql語句中的in

??優化器在處理帶in字句的sql時,會將其轉換為or,2者等價

??優化器在處理帶in的sql時,通常會采用以下4中方法

?Inlist lterator

?Inlist expansion

?inlist filter

?in做子查詢展開,或者既展開又做視圖合并

1 inlist lterator

-----針對in后面是常量集合的一種處理方法

?需要注意的地方:1 inlist lterator是oracle針對in的首選處理方法

???2 來處理in的前提條件是in所在的列一定要有index

???3 不能讓oracle強制走inlist lterator,沒有相關的hint

SQL> select ename,empno from emp where empno in (7521,7566); Execution Plan ---------------------------------------------------------- Plan hash value: 1899965127 --------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 2 | 16 | 2 (0)| 00:00:01 | | 1 | INLIST ITERATOR | | | | | | | 2 | TABLE ACCESS BY INDEX ROWID| EMP | 2 | 16 | 2 (0)| 00:00:01 | |* 3 | INDEX RANGE SCAN | PK_EMP | 2 | | 1 (0)| 00:00:01 | ---------------------------------------------------------------------Predicate Information (identified by operation id): ---------------------------------------------------3 - access("EMPNO"=7521 OR "EMPNO"=7566) 2 inlist expansion| or expansion針對in后面是常量集合的另一種處理方法把in后面的每一個常量都用union all來展開,有多少個常量,就會產生union all 多少次改為union all后,各個分支就可以走自己的index,分區裁剪,表連接等相關的執行計劃而不互相干擾 create index idx_emp_depto on emp(deptno)select /*+ use_concat*/* from emp where deptno in (10,20,30); 也還是走的INLIST ITERATOR

3 inlist filter

??---優化器把in后面的子查詢所對應的結果集當做過濾條件,并且走filter執行計劃

目標sql的in后面子查詢不是常量的集合

??Oracle未對目標sql進行子查詢展開

?

4對in子查詢展開/視圖合并

In 后面不實常量

In后面的子查詢可以展開

?

轉載于:https://www.cnblogs.com/yhq1314/p/10576724.html

總結

以上是生活随笔為你收集整理的oracle里的查询转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。