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一遍?。。?/p>
舉例說明:
打印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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決navicat 鏈接oracle時出現(xiàn)的各種問題
這篇文章主要介紹了解決navicat 鏈接oracle時出現(xiàn)的各種問題,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-08-08
Oracle?listagg去重distinct的三種方式總結
這篇文章主要介紹了Oracle?listagg去重distinct的三種方式總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
Oracle + mybatis實現(xiàn)對數(shù)據(jù)的簡單增刪改查實例代碼
這篇文章主要給大家介紹了關于利用Oracle + mybatis如何實現(xiàn)對數(shù)據(jù)的簡單增刪改查的相關資料,文中圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-10-10
PL/SQL編程經(jīng)驗小結開發(fā)者網(wǎng)絡Oracle
PL/SQL編程經(jīng)驗小結開發(fā)者網(wǎng)絡Oracle...2007-03-03
win平臺oracle rman備份和刪除dg備庫歸檔日志腳本
本文介紹win平臺oracle rman備份和刪除dg備庫歸檔日志腳本2013-11-11
Oracle存儲過程的編寫經(jīng)驗與優(yōu)化措施(分享)
本篇文章是對Oracle存儲過程的編寫經(jīng)驗與優(yōu)化措施進行了詳細的分析介紹,需要的朋友參考下2013-05-05

