儲存過程裡面使用in變數列表異常的處理

2022-07-18 05:27:14 字數 521 閱讀 9687

在寫乙個儲存過程的時候,由於需要用到類似:select id,name from tablename where id in(id1,id2,id3...)的查詢語句,同時括號裡面的變數是拼接得到的,當時沒有多想,直接將儲存過程寫成類似select id,name from tablename where id in(@idstr),然後傳入拼接後的id進去。果然就報錯了:

然後分析了一下,id列是int型別的,但是傳入的是varchar型別,應該是編譯執行的時候,將@idstr當做乙個變數使用,由於id是int型別,所以直接轉為int型別,就報錯了。

於是就換了一種方法,儲存過程類似如下:

declare @sql varchar(max)

set @sql='select id,name from tablename where id in('+@idstr+')'

exec (@sql)

問題解決,所以說,如果用到類似需要傳入乙個變數列表的話,還是先拼接sql,然後再執行。當然,改為一次只傳入乙個id也可以,看業務具體需求。

在儲存過程裡面使用游標

使用游標的情景基本上是在迴圈臨時表裡面的記錄 宣告乙個游標 declare cursor1 cursor for select from temp1 開啟游標 open cursor1 把臨時表裡面值輸入到變數裡面 fetch next from cursor1 into bookid,price,...

使用變數 儲存過程和函式及變數的使用

儲存過程和函式是在資料庫中定義一些sql語句的集合,然後直接呼叫這些儲存過程和函式來執行已經定義好的sql語句。儲存過程和函式可以避免開發人員重複的編寫相同的sql語句。而且,儲存過程和函式是在mysql伺服器中儲存和執行的,可以減少客戶端和伺服器端的資料傳輸。一 建立儲存過程和函式 1.建立儲存過...

在包裡面建立儲存過程

create or replace package 包名 is procedure p rpt d ocbygcc var stattime in date procedure p rpt 025 var stattime in date end 包名 首先是定義乙個包,並宣告包的內容是兩個儲存過程...