Oracle數(shù)據(jù)庫中的游標cursor使用詳解
一、游標定義
游標即cursor,是一種用于遍歷結果集的數(shù)據(jù)類型。它是一個指向結果集的指針,可以用于遍歷結果集中的每一行數(shù)據(jù),但是一次只能指向一行。游標通常用于存儲過程和函數(shù)中,以便在處理結果集時能夠逐行處理數(shù)據(jù)。
游標提供了在逐行的基礎上操作表中數(shù)據(jù)的方法,游標的結果集是由select語句產(chǎn)生的。
拿個表來打比方,游標打開時會在第一行數(shù)據(jù)的上面每fetch一次,下去一行。
二、游標分類
游標有兩種類型:靜態(tài)游標和動態(tài)游標。接下來分別描述各個類型的游標:
2.1靜態(tài)游標
靜態(tài)游標是一種在編譯時就確定結果集的游標,其結果集不會隨著時間或用戶的不同而發(fā)生變化。在Oracle中,靜態(tài)游標包括以下幾種類型:
2.1.1. 隱式游標:
由SELECT語句自動創(chuàng)建的游標,其結果集在編譯時就已經(jīng)確定,不會隨時間或用戶的不同而發(fā)生變化。而且隱式游標是Oracle數(shù)據(jù)庫默認使用的游標類型。它是一種只能在SQL語句中使用的游標,不能在PL/SQL代碼中使用。隱式游標會在執(zhí)行一條SELECT語句時自動創(chuàng)建,并且只能返回一行數(shù)據(jù)。例如:
SELECT column1, column2 FROM table1 WHERE column3 = 'value'; SELECT * FROM employees WHERE department_id = 10;
上面的SELECT語句會自動創(chuàng)建一個隱式游標,其結果集是所有部門ID為10的員工。由于結果集在編譯時就已經(jīng)確定,因此這是一種靜態(tài)游標。
總結:
隱式游標不用聲明,不用打開,不用賦值,不用關閉,這些都是oracle自動完成的。
常見的方式有 delete 、update、 insert select into 單行賦值(主要用來統(tǒng)計dml操作了多少行)格式:INSERT UPDATE DELETE SELECT..int隱式游標的四個屬性
- sql%isopen 判斷游標是否打開 ,永遠返回假
- sql%found 判斷指針里面是否有值 ,如果指針里曾經(jīng)有值 ,返回的是真
- sql%notfound 和found相反
- sql%rowcount 返回指針指過的行數(shù)
舉例說明:
要求給emp1表的10部門員工工資增加500,并打印有多少人增加了 工資:
begin update emp1 set sal=sal+500 where deptno=10; dbms_output.put_line(sql%rowcount); if sql%found then dbms_output.put_line('有人漲工資了'); end if; end;
2.1.2. 顯式游標:
由DECLARE、OPEN、FETCH和CLOSE等語句手動創(chuàng)建的游標,其結果集在定義游標時就已經(jīng)確定,不會隨時間或用戶的不同而發(fā)生變化。并且顯式游標是由程序員在PL/SQL代碼中顯式聲明和使用的游標類型。它可以在程序中讀取和處理多行數(shù)據(jù)。例如:
DECLARE cursor_name CURSOR FOR SELECT column1, column2 FROM table1 WHERE column3 = 'value'; var1 table1.column1%TYPE; var2 table1.column2%TYPE; BEGIN OPEN cursor_name; LOOP FETCH cursor_name INTO var1, var2; EXIT WHEN cursor_name%NOTFOUND; -- 處理數(shù)據(jù) END LOOP; CLOSE cursor_name; END; ------------------------------------------------------------------------------- DECLARE CURSOR c_emp IS SELECT * FROM employees WHERE department_id = 10; v_emp employees%ROWTYPE; BEGIN OPEN c_emp; LOOP FETCH c_emp INTO v_emp; EXIT WHEN c_emp%NOTFOUND; -- 對結果集進行處理 END LOOP; CLOSE c_emp; END;
上面的代碼定義了一個名為c_emp的顯式游標,其結果集是所有部門ID為10的員工。由于結果集在定義游標時就已經(jīng)確定,因此這是一種靜態(tài)游標。
其實顯示游標又分為帶參數(shù)的顯示游標和不帶參數(shù)的顯示游標。
Ⅰ、不帶參數(shù)的顯式游標
聲明方法:
cursor 游標名 is select 語句
例如:
打印部門dept表中的所有部門名稱(dept表一共有4個部門):
declare cursor c1 is select dname from dept; v_name varchar2(20); begin open c1; fetch c1 into v_name; dbms_output.put_line(v_name); fetch c1 into v_name; dbms_output.put_line(v_name); fetch c1 into v_name; dbms_output.put_line(v_name); fetch c1 into v_name; dbms_output.put_line(v_name); close c1; end;
循環(huán)打印dept表中的所有部門名稱:
declare cursor c1 is select dname from dept; v_name varchar2(20); begin open c1; for i in 1..4 loop fetch c1 into v_name; dbms_output.put_line(v_name); end loop; close c1; end;
打印員工emp表所有的員工編號 (表內(nèi)一共有14個員工信息):
declare cursor c1 is select empno from emp; v_name varchar2(20); begin open c1; for i in 1..14 loop fetch c1 into v_name; dbms_output.put_line(v_name); end loop; close c1; end;
但是如果我們不知道一張表內(nèi)某個列中值有多少行時,就得用到游標的四個屬性 :
- 游標名%isopen 判斷游標是否打開,是的話返回真 ,否則返回假
- 游標名%found 判斷游標的指針里是否有值,有值返回真 ,沒值返回假
- 游標名%notfound 判斷游標的指針里是否沒值,沒值返回真 ,有值返回假
- 游標名%rowcount 游標的指針指了多少行,返回的是行數(shù)
普通循環(huán)搭配不帶參數(shù)的顯式游標的步驟順序如下:
- 1.打開游標
- 2.loop
- 3.fetch
- 4.exit when
- 5.打印
- 6.end loop
- 7.關閉游標
比如:
打印員工emp表中的所有員工編號 :
declare cursor c1 is select empno from emp; v_empno number; begin open c1; loop fetch c1 into v_empno; exit when c1%notfound; dbms_output.put_line(v_empno); end loop; close c1; end;
打印emp表經(jīng)理是KING的員工姓名:
declare cursor c1 is select ename from emp where mgr=(select empno from emp where ename='KING'); v_name varchar2(20); begin open c1; loop fetch c1 into v_name; exit when c1%notfound; dbms_output.put_line(v_name); end loop; close c1; end;
打印 emp表經(jīng)理是KING的姓名以及人數(shù):
declare cursor c1 is select ename from emp where mgr=(select empno from emp where ename='KING'); v_name varchar2(20); begin open c1; loop fetch c1 into v_name; exit when c1%notfound; dbms_output.put_line(v_name); end loop; dbms_output.put_line('有'||c1%rowcount||'人'); close c1; end;
while 循環(huán)和游標 -WHILE循環(huán)+%found的步驟 :
- 1.open 打開游標
- 2.fetch 先提取一次 以便進入循環(huán)
- 3.while
- 4.打印 進入循環(huán)先打印一次 避免漏掉第一條數(shù)據(jù)
- 5.fetch
- 6.end loop
- 7.close
為什么這里要多打印一次呢,因為在open后fetch前,我們的游標%found是為假的,所以就無法進入while循環(huán),必須先fetch一遍?。?!
舉例說明:
打印dept表中的所有部門名稱:
declare cursor c1 is select dname from dept; v_name varchar2(20); begin open c1; fetch c1 into v_name; --先提取一次 while c1%found loop dbms_output.put_line(v_name); fetch c1 into v_name; end loop; close c1; end;
要求 打印emp表職位是銷售的員工信息,使用while循環(huán)和游標方法,則語句如下:
declare cursor c is select * from emp where job='SALESMAN'; v emp%rowtype; begin open c; fetch c into v; while c%found loop dbms_output.put_line(lpad(v.empno,9,' ')||''|| lpad(v.ename,9,' ')||''|| lpad(v.job,9,' ')||''|| lpad(v.mgr,9,' ')||''|| lpad(v.hiredate,9,' ')||''|| lpad(v.sal,9,' ')||''|| lpad(v.comm,9,' ')||''|| lpad(v.deptno,9,' ') ); fetch c into v; end loop; close c; end;
Ⅱ、帶參數(shù)的顯式游標聲明參數(shù)時,只用寫類型,不用寫長度,參數(shù)可以在where條件后調(diào)用。使用時需要在open游標后加括號里面填上參數(shù)(多個參數(shù)用逗號隔開)。格式為:
CURSOR cur_name(參 類型,..) IS SELECT 語句(包含參);
比如:
要求打印emp表中部門編號是10的員工姓名,然后再打印emp表中部門編號是20的員工編號:
declare cursor c1(v number) is select ename,empno from emp where deptno=v; vname varchar2(20); vempno number; begin open c1(10); loop fetch c1 into vname,vempno; exit when c1%notfound; dbms_output.put_line(vname); end loop; close c1; open c1(20); loop fetch c1 into vname,vempno; exit when c1%notfound; dbms_output.put_line(vempno); end loop; close c1; end;
請打印emp表中職位是CLERK的姓名,職位是MANAGER的工資 :
declare cursor c1 (v varchar2) is select ename,sal from emp where job=v; v_name varchar2(20); v_sal number; begin open c1('CLERK'); loop fetch c1 into v_name,v_sal; exit when c1%notfound; dbms_output.put_line(v_name); end loop; close c1; open c1('MANAGER'); LOOP fetch c1 into v_name,v_sal; exit when c1%notfound; dbms_output.put_line(v_sal); end loop; close c1; end;
2.1.3. 游標變量:
可以將查詢結果集存儲在游標變量中,以便在后續(xù)的處理中使用。游標變量在定義時需要指定結果集,其結果集也是在編譯時就已經(jīng)確定的。游標變量是一種PL/SQL變量,它可以存儲一個游標對象。游標變量可以在程序中傳遞和重復使用,可以在不同的程序塊中聲明和使用。例如:
DECLARE cursor_name SYS_REFCURSOR; var1 table1.column1%TYPE; var2 table1.column2%TYPE; BEGIN OPEN cursor_name FOR SELECT column1, column2 FROM table1 WHERE column3 = 'value'; LOOP FETCH cursor_name INTO var1, var2; EXIT WHEN cursor_name%NOTFOUND; -- 處理數(shù)據(jù) END LOOP; CLOSE cursor; ------------------------------------------------------------ DECLARE TYPE t_emp IS RECORD ( employee_id employees.employee_id%TYPE, first_name employees.first_name%TYPE, last_name employees.last_name%TYPE, email employees.email%TYPE, phone_number employees.phone_number%TYPE ); TYPE t_emp_list IS TABLE OF t_emp; v_emp_list t_emp_list; BEGIN SELECT employee_id, first_name, last_name, email, phone_number BULK COLLECT INTO v_emp_list FROM employees WHERE department_id = 10; -- 對結果集進行處理 END;
上面的代碼將所有部門ID為10的員工存儲在名為v_emp_list的游標變量中。由于結果集在定義游標變量時就已經(jīng)確定,因此這是一種靜態(tài)游標。
2.1.4. 游標參數(shù):
可以將查詢結果集作為參數(shù)傳遞給存儲過程或函數(shù),以便在后續(xù)的處理中使用。游標參數(shù)在定義時需要指定結果集,其結果集也是在編譯時就已經(jīng)確定的。例如:
CREATE OR REPLACE PROCEDURE p_emp_list (p_dept_id IN NUMBER, p_emp_list OUT SYS_REFCURSOR) IS BEGIN OPEN p_emp_list FOR SELECT * FROM employees WHERE department_id = p_dept_id; END;
上面的代碼定義了一個名為p_emp_list的存儲過程,其參數(shù)p_dept_id是部門ID,p_emp_list是查詢結果集。當調(diào)用p_emp_list存儲過程時,會根據(jù)傳入的部門ID返回相應的員工列表。該存儲過程可以被其他程序調(diào)用,并將查詢結果作為輸出參數(shù)返回。
總結:
靜態(tài)游標是一種在編譯時就確定結果集的游標,其結果集不會隨著時間或用戶的不同而發(fā)生變化。在實際應用中,可以根據(jù)需要選擇不同類型的靜態(tài)游標來處理數(shù)據(jù)。
2.2動態(tài)游標
動態(tài)游標是一種在 PL/SQL 中使用游標的方式,它允許在運行時動態(tài)地構建 SQL 查詢語句,以便適應不同的查詢需求。相比于靜態(tài)游標,動態(tài)游標更加靈活,可以根據(jù)不同的條件和參數(shù)生成不同的查詢語句。
列舉使用動態(tài)游標的示例:
CREATE OR REPLACE PROCEDURE p_emp_list (p_dept_id IN NUMBER, p_emp_list OUT SYS_REFCURSOR) IS v_query VARCHAR2(200); BEGIN v_query := 'SELECT * FROM employees WHERE department_id = ' || p_dept_id; OPEN p_emp_list FOR v_query; END;
在該存儲過程中,使用一個 VARCHAR2 類型的變量 v_query 來構建動態(tài)查詢語句。首先將一個固定的字符串 'SELECT * FROM employees WHERE department_id = ' 和輸入?yún)?shù) p_dept_id 拼接起來,生成一個完整的查詢語句。然后使用 OPEN 語句打開游標 p_emp_list,并將動態(tài)查詢語句作為參數(shù)傳入。
通過使用動態(tài)游標,該存儲過程可以根據(jù)不同的部門 ID 生成不同的查詢語句,并返回不同的查詢結果。這種靈活性使得動態(tài)游標在復雜的查詢場景中非常有用。
但是動態(tài)游標也有強弱之分,下面分別描述:
2.2.1強類型游標
強游標(strong cursor)是指在游標打開時就將所有數(shù)據(jù)都讀入到游標中,因此游標可以在任何時候訪問數(shù)據(jù),但是這種方式會占用大量的內(nèi)存資源。而且強類型游標是可以更換結果集,但是不能換表結構。
比如:
要求打印emp表的10部門的員工姓名,并打印emp1職位是CLERK的員工編號,則語句如下:
declare type ty1 is ref cursor return emp%rowtype; c1 ty1; vemp emp%rowtype; begin open c1 for select * from emp where deptno=10; loop fetch c1 into vemp; exit when c1%notfound; dbms_output.put_line(vemp.ename); end loop; close c1; open c1 for select * from emp1 where job='CLERK'; loop fetch c1 into vemp; exit when c1%notfound; dbms_output.put_line(vemp.empno); end loop; close c1; end;
創(chuàng)建三個表分別為 empa empb empc ,內(nèi)容均和emp表一樣,打印empa中10部門的員工姓名和部門編號,empb中工資大于2000的員工姓名和工資,empc中職位是CLERK的員工姓名和職位 ,則具體語句如下:
create table empa as select * from emp; create table empb as select * from emp; create table empc as select * from emp; declare type ty1 is ref cursor return emp%rowtype; c1 ty1; v_emp emp%rowtype; begin open c1 for select * from empa where deptno=10; loop fetch c1 into v_emp; exit when c1%notfound; dbms_output.put_line(v_emp.ename||' '||v_emp.deptno); end loop; close c1; open c1 for select * from empb where sal>2000; loop fetch c1 into v_emp; exit when c1%notfound; dbms_output.put_line(v_emp.ename||' '||v_emp.sal); end loop; close c1; open c1 for select * from empc where job='CLERK'; loop fetch c1 into v_emp; exit when c1%notfound; dbms_output.put_line(v_emp.ename||' '||v_emp.job); end loop; close c1; end;
2.2.2弱類型游標
弱游標(weak cursor)是指游標只在需要訪問數(shù)據(jù)時才會讀取數(shù)據(jù),因此占用內(nèi)存資源較少,但是需要在訪問數(shù)據(jù)時進行頻繁的I/O操作,因此效率較低。而且弱類型游標也可以更換結果集,而且可以換表結構。
比如:
要求打印emp表的員工姓名和dept表的部門所在地,并打印emp表每個部門的員工人數(shù),則語句如下:
declare type t1 is ref cursor; c1 t1; v1 varchar2(20); v2 number; begin open c1 for select ename from emp; loop fetch c1 into v1; exit when c1%notfound; dbms_output.put_line(v1); end loop; close c1; open c1 for select loc from dept; loop fetch c1 into v1; exit when c1%notfound; dbms_output.put_line(v1); end loop; close c1; open c1 for select count(1) from emp group by deptno; loop fetch c1 into v2; exit when c1%notfound; dbms_output.put_line(v2); end loop; close c1; end;
總結:
在使用動態(tài)游標時,需要根據(jù)具體情況選擇合適的游標類型,權衡內(nèi)存資源和訪問效率。
強類型游標和弱類型游標的區(qū)別:
- 強類型有return open時for的結果集
- 必須和return表結構一致
- 弱類型沒有return open時for的結果集比較自由
2.2.3普通動態(tài)游標
是最常用的動態(tài)游標,語句格式:
declare c1 sys_refcursor; --聲明一個動態(tài)游標
比如:
打印emp表的員工姓名和dept表的部門所在地,并打印emp表每個部門的員工人數(shù),則語句如下:
declare c1 sys_refcursor; v1 varchar2(20); v2 number; begin open c1 for select ename from emp; loop fetch c1 into v1; exit when c1%notfound; dbms_output.put_line(v1); end loop; close c1; open c1 for select loc from dept; loop fetch c1 into v1; exit when c1%notfound; dbms_output.put_line(v1); end loop; close c1; open c1 for select count(1) from emp group by deptno; loop fetch c1 into v2; exit when c1%notfound; dbms_output.put_line(v2); end loop; close c1; end;
要求打印emp表名字包含A的員工姓名和人數(shù),dept表包含A的部門名稱和部門數(shù),則語句如下:
declare c1 sys_refcursor; vname varchar2(20); vcount number; begin open c1 for select ename from emp where ename like'%A%'; loop fetch c1 into vname; exit when c1%notfound; dbms_output.put_line(vname); end loop; close c1; open c1 for select count(1) from emp where ename like'%A%'; loop fetch c1 into vcount; exit when c1%notfound; dbms_output.put_line(vcount); end loop; close c1; open c1 for select dname from dept where dname like'%A%'; loop fetch c1 into vname; exit when c1%notfound; dbms_output.put_line(vname); end loop; close c1; open c1 for select count(1) from dept where dname like'%A%'; loop fetch c1 into vcount; exit when c1%notfound; dbms_output.put_line(vcount); end loop; close c1; end;
for循環(huán)+游標
Ⅰ、有游標名的聲明一個顯式游標,不用打開 ,不用賦值 ,不用關閉,因為有游標名 所以可以用游標的屬性;
比如:
打印dept表的所有信息:
declare cursor c1 is select * from dept; begin for i in c1 loop dbms_output.put_line(i.deptno||' '||i.dname ||' '||i.loc); end loop; end;
Ⅱ、沒有游標名不用聲明 ,不用打開 ,不用賦值 ,不用關閉;不能和動態(tài)游標和帶參數(shù)的顯式游標一起使用 (直接for i in結果集) ;
比如:
打印dept表的所有信息:
begin for i in (select * from dept) loop dbms_output.put_line(i.deptno||' '||i.dname|| ' '||i.loc); end loop; end;
三、游標的優(yōu)缺點
優(yōu)點:
- 可以對大量數(shù)據(jù)進行有效的遍歷和操作,尤其是在數(shù)據(jù)量較大時;
- 可以根據(jù)需要隨時調(diào)整游標位置,靈活性較高;
- 可以在一些特定的場景下提高程序的效率;
- 使用游標可以執(zhí)行多個不相關的操作;
- 使用游標可以提高腳本的可讀性;
- 使用游標可以建立命令字符串,可以傳送表名,或者把變量傳送到參數(shù)中,以便建立可以執(zhí)行的命令字符串;
- 提供基于游標位置而對表中數(shù)據(jù)進行刪除或更新;
缺點:
- 處理大數(shù)據(jù)量時可能會占用大量的系統(tǒng)資源,如內(nèi)存和CPU,效率底下;
- 可能會對數(shù)據(jù)庫的性能產(chǎn)生一定的影響;
- 可能會導致數(shù)據(jù)不一致的問題,如在游標遍歷過程中修改了數(shù)據(jù),但游標并不會立即反映出來;
- 游標使用時會對行加鎖,可能會影響其他業(yè)務的正常進行。
四、游標使用注意事項
在使用游標時,需要注意以下幾點:
- 1. 游標必須在使用前聲明,并且聲明時需要指定游標的類型和返回結果集的SELECT語句。
- 2. 游標必須在使用前打開,并在使用完畢后關閉。
- 3. 游標可以使用FETCH語句獲取結果集中的每一行數(shù)據(jù)。
- 4. 游標可以使用%ROWTYPE屬性來定義一個與結果集結構相同的變量,以便在遍歷結果集時方便地存儲每一行數(shù)據(jù)。
- 5. 游標可以使用FOR循環(huán)結構來遍歷結果集,避免手動進行游標的打開、獲取和關閉操作。
五、游標的作用
游標是一種數(shù)據(jù)庫技術,通過游標可以在一個結果集中逐個地訪問每一條記錄,然后對記錄進行操作。游標可以用于以下幾個方面:
5.1. 遍歷數(shù)據(jù):
游標可以逐條地遍歷查詢結果集,對每一條數(shù)據(jù)進行處理,比如篩選、修改、刪除等操作。
假設有一個包含學生姓名、年齡、成績等信息的數(shù)據(jù)表,需要實現(xiàn)一個查詢功能,查詢所有成績低于60分的學生姓名和年齡。通過游標可以實現(xiàn):
定義一個游標,用于查詢數(shù)據(jù)表中的所有記錄。
使用FETCH語句逐條讀取記錄,然后對每條記錄進行判斷,如果成績低于60分,則將學生姓名和年齡存儲到一個臨時表中。
等待游標讀取完畢后,從臨時表中獲取所有符合條件的學生姓名和年齡,然后返回給用戶。
5.2. 分頁查詢:
通過游標可以實現(xiàn)分頁查詢,每次查詢指定數(shù)量的記錄,以便于提高查詢效率和減少網(wǎng)絡傳輸?shù)臄?shù)據(jù)量。
假設有一個包含1000條記錄的數(shù)據(jù)表,需要實現(xiàn)一個每頁顯示10條記錄的分頁查詢功能。通過游標可以實現(xiàn)以下步驟:
- 1. 定義一個游標,用于查詢數(shù)據(jù)表的所有記錄。
- 2. 使用FETCH語句逐條讀取記錄,然后將記錄存儲到一個緩存區(qū)中。
- 3. 在緩存區(qū)中逐條讀取記錄,直到讀取到10條記錄,然后將這10條記錄返回給用戶。
- 4. 等待用戶請求下一頁數(shù)據(jù),然后再次從緩存區(qū)中讀取下10條記錄,直到所有記錄都被讀取完畢。
通過游標實現(xiàn)分頁查詢功能可以大大提高查詢效率和減少網(wǎng)絡傳輸?shù)臄?shù)據(jù)量。而且,由于游標可以靈活地控制查詢進度,因此可以避免一些不必要的數(shù)據(jù)庫操作,從而提高系統(tǒng)的性能和穩(wěn)定性。
5.3. 數(shù)據(jù)庫事務:
游標可以用于管理數(shù)據(jù)庫事務,它可以讓開發(fā)人員對每一條記錄進行細粒度的控制,從而確保事務的安全性和一致性。
注意:
游標可以在事務中使用,但它并不是實現(xiàn)事務的關鍵。
5.4. 數(shù)據(jù)庫備份和恢復:
游標可以用于數(shù)據(jù)庫備份和恢復,通過游標可以逐條讀取數(shù)據(jù)庫中的數(shù)據(jù),然后將數(shù)據(jù)寫入備份文件中,或者將備份文件中的數(shù)據(jù)逐條恢復到數(shù)據(jù)庫中。
總結
到此這篇關于Oracle數(shù)據(jù)庫中的游標使用的文章就介紹到這了,更多相關Oracle游標內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
oracle數(shù)據(jù)庫創(chuàng)建備份與恢復腳本整理
oracle數(shù)據(jù)庫創(chuàng)建備份與恢復是oracle數(shù)據(jù)庫日常維護經(jīng)常用到的,下面與大家分享下常用腳本的整理,不會的朋友可以參考下哈2013-05-05oracle數(shù)據(jù)庫中查看系統(tǒng)存儲過程的方法
這篇文章主要介紹了oracle數(shù)據(jù)庫中查看系統(tǒng)存儲過程的方法,需要的朋友可以參考下2014-06-06Oracle CBO優(yōu)化模式中的5種索引訪問方法淺析
這篇文章主要介紹了Oracle CBO優(yōu)化模式中的5種索引訪問方法淺析,包含索引唯一掃描、索引范圍掃描、索引全掃描、索引跳躍掃描、索引快速全掃描等內(nèi)容,需要的朋友可以參考下2014-07-07oracle數(shù)據(jù)庫截取字符串substr函數(shù)使用舉例
在Oracle數(shù)據(jù)庫中可以使用SUBSTR函數(shù)來截取字符串,這篇文章主要給大家介紹了關于oracle數(shù)據(jù)庫截取字符串substr函數(shù)使用的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-01-01