insertselect存儲過程
一、簡單的儲存過程:
1、創建一個存儲過程
create procere GetUsers()
begin
select * from user;
end;12345
2、調用存儲過程
call GetUsers();12
3、刪除存儲過程
drop procere if exists GetUsers;
二、帶參數的存儲過程
1、MySql 支持 IN (傳遞給存儲過程) , OUT (從存儲過程傳出) 和 INOUT (對存儲過程傳入和傳出) 類型的參數 , 存儲過程的代碼位於 BEGIN 和 END 語句內 , 它們是一系列 SQL 語句 , 用來檢索值 , 然後保存到相應的變數 (通過指定INTO關鍵字) ;
2、下面的存儲過程接受三個參數 , 分別用於獲取用戶表的最小 , 平均 , 最大分數 , 每個參數必須具有指定的類型 , 這里使用十進制值(decimal(8,2)) , 關鍵字 OUT 指出相應的參數用來從存儲過程傳出
create procere GetScores(
out minScore decimal(8,2),
out avgScore decimal(8,2),
out maxScore decimal(8,2)
)
begin
select min(score) into minScore from user;
select avg(score) into avgScore from user;
select max(score) into maxScore from user;
end;1234567891011
3、調用此存儲過程 , 必須指定3個變數名(所有 MySql 變數都必須以@開始) , 如下所示 :
call GetScores(@minScore, @avgScore, @maxScore);12
4、該調用並沒有任何輸出 , 只是把調用的結果賦給了調用時傳入的變數@minScore, @avgScore, @maxScore, 然後即可調用顯示該變數的值 :
select @minScore, @avgScore, @maxScore;
5、使用 IN 參數 , 輸入一個用戶 id , 返回該用戶的名字 :
create procere GetNameByID(
in userID int,
out userName varchar(200)
)
begin
select name from user
where id = userID
into userName;
end;12345678910
6、調用存儲過程 :
call GetNameByID(1, @userName);
select @userName;123
2. Oracle 存儲過程insert into select 日期條件問題
首先你測試看看,第二段的日期是不是沒有傳遞進去,在ORACLE裡面設置輸出跟蹤到底問題出在哪兒,insert into select 嵌套語句是可以識別變數的,你的語句沒什麼問題,看看是不是你傳遞參數沒到位
3. oracle 存儲過程中 使用insert into Table (select) 進行數據批量添加 執行後無數據 但單獨將上述insert
存貯過程運行了嗎?
不會是只創建了事吧!
4. sqlserver存儲過程中有多個insert和select,如何只獲得想要的返回集
@id INT, @value VARCHAR(10);BEGIN -- 定義游標. DECLARE c_test_main CURSOR FAST_FORWARD FOR SELECT id,valueFROM test_main; -- 打開游標. OPEN c_test_main; WHILE 1=1 BEGIN -- 填充數據. FETCH NEXT FROM c_test_main INTO @id, @value; -- 假如未檢索到數據,退出循環. IF@@fetch_status!= 0 BREAK; PRINT @value; END; -- 關閉游標 CLOSE c_test_main; -- 釋放游標. DEALLOCATE c_test_main;END;