當前位置:首頁 » 服務存儲 » oracle存儲和游標結合
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

oracle存儲和游標結合

發布時間: 2022-05-13 01:46:22

㈠ oracle存儲過程游標問題

--打開游標並提取後面sql的第一行數據放到游標中 這里就是打開游標
open for 是隱式游標的寫法 不建議使用 這種游標好象不需要關閉 具體你自己測試下 而且少了expection 處理

fetch mycur into yang_02;
--循環插入數據
多餘了 可以不要 前面有fetch了如果還有這里的話 就只能插入奇數行
其他沒什麼問題了 還有你這個過程用ref cursor是浪費 沒必要用 用簡單的顯示游標更好點

㈡ oracle存儲過程游標有什麼用

1,什麼是游標?
①從表中檢索出結果集,從中每次指向一條記錄進行交互的機制。

②關系資料庫中的操作是在完整的行集合上執行的。
由SELECT 語句返回的行集合包括滿足該語句的WHERE 子句所列條件的所有行。由該語句返回完整的行集合叫做結果集。
應用程序,尤其是互動和在線應用程序,把完整的結果集作為一個單元處理並不總是有效的。
這些應用程序需要一種機制來一次處理一行或連續的幾行。而游標是對提供這一機制的結果集的擴展。

游標是通過游標庫來實現的。游標庫是常常作為資料庫系統或數據訪問API 的一部分而得以實現的軟體,
用來管理從數據源返回的數據的屬性(結果集)。這些屬性包括並發管理、在結果集中的位置、返回的行數,
以及是否能夠在結果集中向前和/或向後移動(可滾動性)。

游標跟蹤結果集中的位置,並允許對結果集逐行執行多個操作,在這個過程中可能返回至原始表,也可能不返回至原始表。
換句話說,游標從概念上講基於資料庫的表返回結果集。
由於它指示結果集中的當前位置 ,就像計算機屏幕上的游標指示當前位置一樣,「游標」由此得名。

㈢ oracle 存儲過程中 應用游標, 問題出在哪裡了呢

-- 裝載數據
fetch cur_1 into empno, ename,job,mgr,hiredate,sal,comm,deptno;
1、裡面into之後的那些變數你沒有定義,你得定義變數,然後將游標中的東西fetch給這些變數。2、個人認為你開始判斷游標是否已打開完全沒有必要,如果異常,你在exception里close就行了。
3、你OPEN之後沒有游標exit的條件

㈣ oracle在存儲過程中定義游標

createorreplace
procerepro6
as
vempnoemp.empno%type;
venameemp.ename%type;
cursorc_empisselectempno,enamefromemp;
begin
openc_emp;
loop
fetchc_empintovempno,vename;
exitwhenc_emp%notfound;
dbms_output.put_line('編號:'||vempno||'姓名:'||vename);
endloop;
closec_emp;
end;

㈤ Oracle存儲過程和游標操作

--第一個題目,我的表叫stu,你別忘了改成你的表名
createorreplaceprocerepro7
as
cursorc_emp1isselectename,salfromstu;
venamestu.ename%type;
vsalstu.sal%type;
vnewsalstu.sal%type;
vfdnumber:=0;
begin
openc_emp1;
loop
fetchc_emp1intovename,vsal;
exitwhenc_emp1%notfound;
vfd:=vsal*0.2;
ifvfd<=300
thenupdatestusetsal=sal+vfdwhereename=vename;
vnewsal:=vsal+vfd;
dbms_output.put_line('員工'||vename||'漲了'||vnewsal||'工資');
endif;
endloop;
closec_emp1;
end;

㈥ oracle 關於存儲過程和游標的問題

首先你要返回到應用後台做文件刪除肯定是結果集映射到List,
然後再單獨進行Delete操作、或者你先刪除,待返回成功標志再刪除文件。
如果選擇存儲過程的話,你就要定義Oracle的Package、聲明游標變數、用作存儲過程的返回out參數。

㈦ oracle中存儲過程與游標的結合使用問題

(v_cnameinvarchar)as
s_tmpnumber;
s_totalnumber;
cursorcur_gradeisselect*fromscwherec#in(selectc#fromcwherecname=v_cname);
begin
forcur_recincur_gradeloop
s_tmp:=cur_rec.grade;
s_total:=nvl(s_total,0)+nvl(s_tmp,0);
endloop;
dbms_output.put_line(v_cname||'的總分是:'||s_total);
end;

㈧ oracle存儲過程中使用游標作為out類型參數,求救!

1、你定義的【RET_CURSOR_VALUE】是一個游標變數,當他作為參數傳入過程【GET_EMPINFOBYDEPNO】時候已經被打開(就是open...for),在主程序中再度打開是沒有必要的也是錯誤的(且游標變數只能用【open...for】的形式打開)。
2、所以把【OPEN
RET_CURSOR_VALUE】這句話刪掉,就沒有問題了。
*******************************
口說無憑,oracle實施log請參照:
說明:我把empno改成20了(因為表裡面沒有1的數據),還有把open語句注掉了。
*******************************
[SCOTT@ORA1]
SQL>DECLARE
2
RET_CURSOR_VALUE
PKG_CONST.REF_CURSOR;
3
RET_EMPNO
EMP.EMPNO%TYPE;
4
RET_ENAME
EMP.ENAME%TYPE;
5
BEGIN
6
GET_EMPINFOBYDEPNO(20,
RET_CURSOR_VALUE);
7
--OPEN
RET_CURSOR_VALUE
;--報游標類型有誤,未解決!!!
8
LOOP
9
FETCH
RET_CURSOR_VALUE
10
INTO
RET_EMPNO,
RET_ENAME;
11
EXIT
WHEN
RET_CURSOR_VALUE%NOTFOUND;
12
DBMS_OUTPUT.PUT_LINE('empNo
is:'
||
RET_EMPNO
||
',empName
is'
||
13
RET_ENAME);
14
END
LOOP;
15
CLOSE
RET_CURSOR_VALUE;
16
END;
17
/
empNo
is:7369,empName
isSMITH
empNo
is:7566,empName
isJONES
empNo
is:7902,empName
isFORD
---
以上,希望對你有所幫助。