存儲過程loop
㈠ oracle存儲過程怎麼寫循環
寫循環的操作方法和步驟如下:
1、第一步,編寫存儲過程的整體結構,然後定義變數,見下圖。
㈡ oracle 存儲過程的loop <<
<<>>
這樣的寫法是個標記,無實際意義,如果腳本中有GOTO語句,走到GOTO語句後會直接跳轉到標記所在的行。
㈢ 如何在存儲過程中使用Loop
ascursor 應該是as cursor
w_name varchar2 這點應該聲明數據類型的大小,如:varchar2(50);同時變數名最好不要和欄位名同名。
begin dbms_output.put_line(w_name); end; 這兒可以不用寫begin end;直接寫dbms_output.put_line(w_name);
如:
CREATE OR REPLACE PROCEDURE TEST_FORINLOOP() AS
CURSOR TEST_CURSOR IS
SELECT W_NAME FROM WORK_ORACLE_TEST;
V_NAME WORK_ORACLE_TEST%Rowtype;
BEGIN
FOR V_NAME IN TEST_CURSOR LOOP
DBMS_OUTPUT.PUT_LINE(V_NAME);
END LOOP;
END TESTFORINLOOP;
也可以:
CREATE OR REPLACE PROCEDURE TEST_FORINLOOP() AS
CURSOR TEST_CURSOR IS
SELECT W_NAME FROM WORK_ORACLE_TEST;
V_NAME VARCHAR2(50);
BEGIN
FOR V_NAME IN TEST_CURSOR LOOP
DBMS_OUTPUT.PUT_LINE(V_NAME);
END LOOP;
END TESTFORINLOOP;
㈣ oracle存儲過程 loop字元串遍歷
sql">declare
xvarchar2(20);
v_lengthint;
yint;
v_strvarchar2(1);
begin
x:='wqr3331412rr';
selectlength(x)intov_lengthfromal;
y:=1;
whiley<=v_lengthloop
selectsubstr(x,y,1)intov_strfromal;
dbms_output.put_line(v_str);
y:=y+1;
endloop;
end;
直接運行吧,結果如圖
㈤ mysql里的存儲過程是怎樣循環的
declare storeId varchar(10);
在存儲過程中創建游標,這個游標裡面存了你所有要循環的數據,集合:
declare diy_cursor cursor for
select store_id from t_b_store;
open diy_cursor;--打開游標
diy_loop:loop ---這里開始循環
FETCH diy_cursor into storeId; --提取本次循環的數據,保存在storeId中
if done = 1 then --done是在存儲過程開始的時候定義的一個整形變數
leave diy_loop;---如果游標中的數據提取完畢,就自動跳出這個循環end if;
----在這里用你循環取到的storeId做你想做的事情,就是寫你的sql啦---
end loop; --循環結束
close diy_loop; --關閉游標
㈥ 怎麼寫存儲過程
一、整體格式。存儲過程的格式如下:
CREATE PROCEDURE [creator.]"proc_name" ( /* parameters,... */ )
/* RESULT ( column-name,... ) */
BEGIN
;
END
其中creator是用戶名,比如dba;proc_name是你自己起的過程名;後面的參數可有可無,視自己情況定,如果有格式如(a integer,b char(50));再下面的RESULT應該是返回值,這個沒用過不知道怎麼回事!
二、內容。把這些都寫好了可能是這樣:
CREATE PROCEDURE dba.myProcere ( @a integer,@b char(50))
BEGIN
;
END
但是這樣子還是不能編譯的,因為整個過程體是空的,而我學習的結果是過程中至少要有一個SQL語句。所以要這樣寫才不會出錯:
CREATE PROCEDURE dba.myProcere ( a integer,b char(50))
BEGIN
SELECT * FROM MyTable
END
三、語法。
1、分號。在寫的過程中最郁悶的問題是分號!最後發現好像是這樣:
每一句都要加分號,不管是SQl語句還是其它的什麼語句,但是最後保存後最後一句的分號會被自動刪除!(我用的是Sybase的Sybase Central)。
2、定義變數。
格式為Declare @varName integer;(注意有分號!)「@」號好像可有可無!
3、SELECT語句。
格式為:
SELECT Count(*) INTO @varName FROM MyTable WHERE id = @a;
4、if語句。
格式為:
if(varName > 0) then
return
end if;(注意還有分號!)
5、循環語句。
格式為:
loop
……
end loop;(注意分號!)
6、設置變數值。
格式為:
set @varName = 10;
set @varName = @varName2;
7、字元串。
Declare myString char(50);
set @myString = 'Hello!';
要用單引號!
8、定義游標。
格式為:
declare MyCursor dynamic scroll cursor for
select …… from …… where ……;
9、打開、使用和關閉游標。
Open MyCursor;
fetch next MyCursor into ……;
Close MyCursor;
10、調用方法。
string ls_name="test"
DECLARE ProcName1 PROCEDURE FOR ProcName2
@wg_wellid=2,@wg_wgid=1,@wg_stringsid=1,@bha_wellid=2,@bha_name=:ls_name;
execute ProcName1 ;
close ProcName1 ;
其中ProcName1 是調用程序中自定義的過程名,ProcName2是資料庫中存儲過程的名字,下面的傳入的參數。
㈦ oracle存儲過程for in loop的問題
ascursor 應該是as cursor
w_name varchar2 這點應該聲明數據類型的大小,如:varchar2(50);同時變數名最好不要和欄位名同名。
begin dbms_output.put_line(w_name); end; 這兒可以不用寫begin end;直接寫dbms_output.put_line(w_name);
如:
CREATE OR REPLACE PROCEDURE TEST_FORINLOOP() AS
CURSOR TEST_CURSOR IS
SELECT W_NAME FROM WORK_ORACLE_TEST;
V_NAME WORK_ORACLE_TEST%Rowtype;
BEGIN
FOR V_NAME IN TEST_CURSOR LOOP
DBMS_OUTPUT.PUT_LINE(V_NAME);
END LOOP;
END TESTFORINLOOP;
也可以:
CREATE OR REPLACE PROCEDURE TEST_FORINLOOP() AS
CURSOR TEST_CURSOR IS
SELECT W_NAME FROM WORK_ORACLE_TEST;
V_NAME VARCHAR2(50);
BEGIN
FOR V_NAME IN TEST_CURSOR LOOP
DBMS_OUTPUT.PUT_LINE(V_NAME);
END LOOP;
END TESTFORINLOOP;
㈧ oralce存儲過程怎麼用loop進行雙重循環呀
全部過程都給出來,光這一段看不出來
㈨ 新手求教: 一個oracle存儲過程中使用CURSOR 和loop循環 怎樣寫可以實現:如果某此loop循環,發生異常報-O
CREATE OR REPLACE PROCEDURE p_test_emp is
CURSOR c1 is
select empno, ename from emp;
t_c1 c1%rowtype;
err exception;
begin
open c1;
loop
FETCH c1
INTO t_c1;
if (c1%found) then
insert into emp_test (empno, ename) values (t_c1.empno, t_c1.ename);
commit;
else
raise err;(這個err 需要在前面定義的,類型為異常)
end if;
end loop;
close c1;
EXCEPTION
when err then
(這里可以寫上你需要的提示)
WHEN OTHERS THEN
rollback;
end;
這樣寫的好處就是 當裡面發生錯誤的時候直接跳到異常中的err 不會中斷這段代碼的執行。
樓上說的把exeception放到循環裡面也是不行的,主要就是要修改exeception中,不能rollback,否則的一定執行不下去。如果有疑問我們繼續討論。
㈩ 存儲過程loop exit mysql中沒有exit么
visual foxpro嗎,loop是回到循環條件判斷是否能滿足循環條件繼續循環,exit則是退出一層循環,執行循環後面的語句