儲存過程中的迴圈加判斷

2021-08-01 10:20:50 字數 1728 閱讀 4905

儲存過程迴圈

create or replace procedureprocedure_name  [有引數就寫,沒引數就不寫 ]

as

cursorcursor_name  -- 游標,是用儲存資料的

is

select 欄位名,

......,[

或者是

* ]  from table_name [

可以加各種條件

] ;(第一張表)

parameter_name 字段型別 ;

begin

for自定義名(info)incursor_nameloop  --迴圈

-- 例如,要先刪除已存在的資料,再新增,之前有出過問題(不知道是不是沒有分開的緣故),所以將插入和刪除語句放在兩個迴圈中;

select count (欄位名

/ * )intoparameter_name  from table_name where 欄位名=

info.上面is後面查詢語句對應的欄位名

ps:(兩張表的名稱可以不同,型別不同的話,需要轉換);  (第二張表)

--判斷資料是否存在

ifparameter_name >0then

delete from table_name where 欄位名

=info.

第一張表欄位名 ;

end  if;

end  loop;

commit;  --一定要提交,要不會死鎖

for自定義名(info)incursor_nameloop  --迴圈

insert into table_name values(info.一表欄位名

,............ );

end  loop;

commit;  --一定要提交,要不會死鎖

end ;

錯誤情況:

ora-02070: 資料庫

b2b2

不支援此上下文中的

to_number

原因:

是因為兩張表字段不一致,需要轉換;

eg:

goodsid

乙個是varchar2

,型別,另乙個是

number

型別,

change _parameter_type_name varchar2( n ); --引數型別

-- 當用到該引數時,轉換:

change _parameter_type_name :=info(迴圈裡的同上).要轉換的欄位名

SqlServer儲存過程中迴圈的使用

1.while迴圈 格式示例如下 declare iint set i 1 while i 30begin insert into test userid values i set i i 1end2.游標迴圈 格式示例如下 declare a1varchar 10 a2varchar 10 a3i...

oracle學習 PL SQL 儲存過程中迴圈

pl spl 提供了3中不同型別的迴圈結構 例項 索引 loop counter從1開始,到10 結束,迴圈共執行10次 for loop counter in 1 10 loop 可執行語句.endloop 索引loop counter從10開始,到1結束,迴圈共執行10次 for loop co...

SQLServer 儲存過程中各種判斷是否為空

1.判斷是否存在這樣的記錄 if not exists 和 if exists 相對應 例 使用者是否存在 if not exists if exists select 1 from user nolock where username abcd begin print 使用者存在 end else...