游標oracle存儲過程
A. oracle存儲過程游標使用疑問
1、for t_name in (select ...) loop
這個是隱式游標,相當於一個結果集,隱式Cursor由系統自動打開和關閉。
exit when %notfound是配合fetch使用,沒有fetch就不需要。
你第一個存儲過程可以這樣寫:
create or replace procere d_1 is
begin
for cur in (select * from t_t) ---這個cur是隱式游標,無需定義,直接使用。
loop
dbms_output.put_line(cur.name);
end loop;
end;
/
2、使用的是標準的顯式游標
a 定義游標---Cursor [Cursor Name] IS;
b 打開游標---Open [Cursor Name];
c 操作數據---Fetch [Cursor name]
d 關閉游標---Close [Cursor Name]
希望能幫到你。
B. oracle存儲過程中打開游標有幾種方法用open直接打開
兩種方法
1.聲明游標時寫好SELECT語句,如
CURSOR r_cur1 IS select *** from tableName where 條件;
使用時
OPEN r_cur1;
LOOP
FETCH *** INTO variable;
EXIT WHEN r_cur1%NOTFOUND OR r_cur1%NOTFOUND IS NULL;
。。。
2.聲明游標
ccc sys_refcursor;
使用時
open ccc for select dept_code,dept_name from comm.dept_dict;
loop
fetch ccc into aa,bb;
exit when ccc%notfound;
。。。
end loop;
close ccc;
C. oracle怎樣用游標調用存儲過程
這個需要用程序包package來做。在包頭里定義入參為游標
sql">createorreplace
PACKAGEpro_test
AS
TYPECURSOR_PAGEISREFCURSOR;
PROCEDUREinsert_one_teacher(
p_1INCURSOR_PAGE);
END;
後麵包體就不列了。
D. oracle存儲過程游標有什麼用
1,什麼是游標?
①從表中檢索出結果集,從中每次指向一條記錄進行交互的機制。
②關系資料庫中的操作是在完整的行集合上執行的。
由SELECT 語句返回的行集合包括滿足該語句的WHERE 子句所列條件的所有行。由該語句返回完整的行集合叫做結果集。
應用程序,尤其是互動和在線應用程序,把完整的結果集作為一個單元處理並不總是有效的。
這些應用程序需要一種機制來一次處理一行或連續的幾行。而游標是對提供這一機制的結果集的擴展。
游標是通過游標庫來實現的。游標庫是常常作為資料庫系統或數據訪問API 的一部分而得以實現的軟體,
用來管理從數據源返回的數據的屬性(結果集)。這些屬性包括並發管理、在結果集中的位置、返回的行數,
以及是否能夠在結果集中向前和/或向後移動(可滾動性)。
游標跟蹤結果集中的位置,並允許對結果集逐行執行多個操作,在這個過程中可能返回至原始表,也可能不返回至原始表。
換句話說,游標從概念上講基於資料庫的表返回結果集。
由於它指示結果集中的當前位置 ,就像計算機屏幕上的游標指示當前位置一樣,「游標」由此得名。
E. 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;
F. oracle在存儲過程中定義游標
createtableemp
(idvarchar2(10),
namevarchar2(20),
sexnumber,
tyvarchar2(20)
);
insertintoempvalues('001','Tom',1,'gcs');
insertintoempvalues('002','John',1,'dba');
insertintoempvalues('003','Jean',0,'gcs');
insertintoempvalues('004','Reid',1,'gcs');
commit;
createorreplaceprocerepro6as
cursorcris
select*
fromemp
wheresex=1
andty='gcs';
begin
forcr_resultincrloop
begin
dbms_output.put_line('ID:'||cr_result.id||'NAME:'||
cr_result.name);
end;
endloop;
endpro6;
G. Oracle調用存儲過程輸出的游標問題
不知道你那裡。
是不是可以把那個 存儲過程 (參數是游標)的。
修改為 函數, 返回遊標。
如果可以修改的話, 那麼你參考一下 下面這個例子代碼
--測試表數據。
select*fromtest_main;
IDVALUE
------------------------------
1ONE
3THREE
2TWO
--返回結果集的函數.
CREATEORREPLACEFUNCTIONGet_Test_Main_All
RETURNSYS_REFCURSOR
IS
return_cursorSYS_REFCURSOR;
BEGIN
OPENreturn_cursorFOR'SELECT*FROMtest_main';
RETURNreturn_cursor;
END;
/
--普通的查詢,來查看結果.
SELECTGet_Test_Main_All()FROMal;
GET_TEST_MAIN_ALL()
--------------------
CURSORSTATEMENT:1
CURSORSTATEMENT:1
IDVALUE
------------------------------
1ONE
3THREE
2TWO
--存儲過程調用,來獲取結果.
DECLARE
--調用函數的返回值.
testCursorSYS_REFCURSOR;
--存儲單行數據.
testRectest_main%ROWTYPE;
BEGIN
--調用返回結果集的函數.
testCursor:=Get_Test_Main_All();
--循環,遍歷結果.
LOOP
--游標向前.
FETCHtestCursorINTOtestRec;
--無數據的情況下,退出循環.
EXITWHENtestCursor%NOTFOUND;
--輸出調試信息.
dbms_output.put_line(TO_CHAR(testRec.id)||''||testRec.value);
ENDLOOP;
END;
/
1ONE
3THREE
2TWO
PL/SQL過程已成功完成。
H. Oracle存儲過程游標for循環怎麼寫
一、不帶參數的游標for循環
1
首先編寫存儲過程的整體結構,如下:
create or replace procere test_proc is
v_date date; --變數定義
begin
select sysdate into v_date from al;
end test_proc;
2
定義游標:
create or replace procere test_proc is
v_date date; --定義變數
cursor cur is select * from ldcode; --定義游標
begin
select sysdate into v_date from al;
end test_proc;
3
編寫for循環:
create or replace procere test_proc is
v_date date; --定義變數
cursor cur is select * from ldcode where rownum<10; --定義游標
begin
select sysdate into v_date from al;
--游標for循環開始
for temp in cur loop --temp為臨時變數名,自己任意起
Dbms_Output.put_line(temp.Code); --輸出某個欄位,使用"變數名.列名"即可。
end loop;
--游標for循環結束
end test_proc;
4
測試運行,點擊【DBMS Output】標簽頁查看結果如下圖:
END
二、帶參數的游標for循環
1
定義帶參數的游標:
cursor cur(v_codetype ldcode.Codetype%TYPE) is
select * from ldcode where codetype = v_codetype; --定義游標
定義游標格式:
cursor 游標名稱(變數定義) is 查詢語句;
注意:
where條件中的變數名v_codetype要與游標定義cur(v_codetype ldcode.Codetype%TYPE)中的一致。
2
編寫for循環部分:
--游標for循環開始
for temp in cur('llmedfeetype') loop
--temp為臨時變數名,自己任意起
--cur('llmedfeetype')為"游標名稱(傳入的變數)"
Dbms_Output.put_line(temp.Code); --輸出某個欄位,使用"變數名.列名"即可。
end loop;
--游標for循環結束
3
測試運行,點擊【DBMS Output
I. oracle 關於存儲過程和游標的問題
首先你要返回到應用後台做文件刪除肯定是結果集映射到List,
然後再單獨進行Delete操作、或者你先刪除,待返回成功標志再刪除文件。
如果選擇存儲過程的話,你就要定義Oracle的Package、聲明游標變數、用作存儲過程的返回out參數。