存儲過程中變數
① 存儲過程中如何定義一個變數
存儲過程常見的變數:局部變數、用戶變數、系統變數
用select...into語句。
這個SELECT語法把選定的列直接存儲到變數。因此,只有單一的行可以被取回。
重要:
SQL變數名不能和列名一樣。如果SELECT ... INTO這樣的SQL語句包含一個對列的參考,並包含一個與列相同名字的局部變數,MySQL當前把參考解釋為一個變數的名字。例如,在下面的語句中,xname 被解釋為到xname variable 的參考而不是到xname column的:
CREATE PROCEDURE sp1 (x VARCHAR(5)) BEGIN DECLARE xname VARCHAR(5) DEFAULT 'bob'; DECLARE newname VARCHAR(5); DECLARE xid INT; SELECT xname,id INTO newname,xid FROM table1 WHERE xname = xname; SELECT newname; END;
當這個程序被調用的時候,無論table.xname列的值是什麼,變數newname將返回值『bob』。
③ 存儲過程中變數的使用以及如何構造有單引號的Sql語句
--下面寫的這個存儲過程,功能是接收一個品種參數,根據這個參數查詢符合條件的記錄,並將這些記錄插入到另一個表中,然後從這個表中查出數據,最後刪除這個表。 create procere [dbo].[ceshi] @m as varchar(50) set @sql='insert into dbo.TempAVPrice (HQ_time,OpenPrice,HighPrice,LowPrice,ClosePrice,Hold_Vol,Accept_Vol,Accept_Money,AVPrice,UnUsed) select HQ_time,OpenPrice,HighPrice,LowPrice,ClosePrice,Hold_Vol,Accept_Vol,Accept_Money,AVPrice,UnUsed from dbo.TempPriceList where alisa like''' +@m+'%'''
④ 存儲過程的變數指什麼
存儲過程是面向對象的資料庫編程語言,與其他面向對象編程語言類似,可聲明變數,用變數來存取某一類值,變數在存儲過程中佔有非常重要的位置。變數聲明在MySQL語言的存儲過程中,變數有會話變數、存儲過程變數兩種。兩種變數的聲明方式不同,作用場景也不盡相同,在實際使用中要根據需要加以選擇。
1.變數種類((1)會話變數會話變數也稱用戶變數,可以在一個客戶端會話的任何地方聲明,作用域是整個會話,會話斷開後,會話變數也就消失。會話變數名以@開頭,使用set直接賦值,在一個會話內,會話變數只需初始化一次。
例如,Set@num=1;表示聲明了一個名字叫「@num」的會話變數,其初始值為1。
(2)存儲過程變數存儲過程變數以DECLARE為關鍵字聲明的變數,只能在存儲過程中使用,其命名不需要以@開頭。以DECLARE聲明的變數都會被初始化為NULL,存儲過程變數存在於資料庫伺服器上。2.變數定義存儲過程變數定義格式:DECLARE+變數名+數據類型+[DEFAULTVALUE]其中,((1)DECLARE為聲明存儲過程變數的關鍵字;
(2)變數名可以任意,但盡可能達到能表意的目的;
(3)數據類型為MySQL的數據類型,如int
⑤ 淺談MySQL存儲過程中declare和set定義變數的區別
在存儲過程中常看到declare定義的變數和@set定義的變數。簡單的來說,declare定義的類似是局部變數,@set定義的類似全局變數。
1、declare定義的變數類似java類中的局部變數,僅在類中生效。即只在存儲過程中的begin和end之間生效。
2、@set定義的變數,叫做會話變數,也叫用戶定義變數,在整個會話中都起作用(比如某個應用的一個連接過程中),即這個變數可以在被調用的存儲過程或者代碼之間共享數據。如何理解呢?可以看下面這個簡單例子,很好理解。
(1)先執行下面腳本,創建一個存儲過程,分別有declare形式的變數和@set形式的變數
DROP PROCEDURE IF EXISTS temp;
DELIMITER //CREATE PROCEDURE temp()BEGIN
DECLARE a INT DEFAULT 1; SET a=a+1; SET @b=@b+1; SELECT a,@b;END//DELIMITER ;
(2)接著為b變數初始化。
SET @b=1;
(3)然後重復調用這個存儲過程。
CALL temp();
(4)會發現a的值不改變,而b的值會一直增加。
所以,總結起來就是開頭那句話,declare定義的類似是局部變數,@set定義的類似全局變數。
⑥ sql2005存儲過程中變數的使用
@yf在你的存儲過程中是定義了,但是在@sql中沒有定義,當你執行@sql的時候,外面定義的變數在裡面是無效的。給你3點建議。
1. 能不用動態sql盡量不要用,因為系統沒法給你預先確定執行計劃,所以動態sql是不高效的。
2. 既然你用了動態sql,那麼復雜的判斷邏輯就不要放在 @sql 裡面了。而是放在外面。
3. 外面定義的@yf,是一個變數,如果直接用在@sql那就不是變數,而僅僅是一個符號,所以只可以用 @sql = @sql + @yf的方式使用,不可以在裡面直接用。當然還要注意單引號。
4. 臨時表不是表變數,用完記得刪除。 如果涉及到的數據不是特別多,建議你用表變數效率更高。declare @test001 table (a_yf int,a_dwbh int)
⑦ 存儲過程中日期的變數是什麼
DATE。存儲過程引導數據時,通常使用時間欄位(時間戳)洞掘來確定是否需要更新,存儲洞慧過程中的變數定義為DATE,則Oracle會根據變數DATE自動將數據表中的時間欄位轉換為日期類型,並截取時間信息,但是,要導入的數據一天要更新多納顫答次,並且實時性要求較高,因此必須精確到秒。從變數的作用域(即從空間)的角度來觀察,變數可以分為全局變數和局部變數。變數的存儲有兩種不同的方式:靜態存儲方式和動態存儲方式。
⑧ SQL 存儲過程變數
整個語句塊創建了一個存儲過程,其中的查詢使用了存儲過程的參數。你可以通過直接執行存儲過程,將值傳給傳出過程的參數,來實現執行查詢。
例如:
execute dbo].[p_sele_sp] '%a%','1%',『aaa%』,'bbb%';
如果希望直接執行查詢語句,則需要用declare關鍵字事先聲明變數。如下:
-- 聲明變數
declare @spbh varchar(20) , @zjm varchar(100) , @sptm varchar(20) , @splb varchar(20)
-- 給變數賦值
set @spbh = 』%a%'
set @zjm = '1%'
set @sptm = 『aaa%』
set @splb = 'bbb%'
--執行查詢
SELECT TOP 200 spbh,spname,dw,spgg,scqy,spcd,sl,lsj,zdsj,spid,splb,jj,
sptm,spsx,kfid,jx,pzwh,is_sy,jbz,zbz,ajia,bjia,cjia,djia,bz,bz1,bz2,bz3,bz4,bz5,bz6,bz7,bz8,bz9
FROM t_sp_info
WHERE ( status = '是' ) AND
( pym like @zjm OR spname like @zjm OR spbh like @spbh OR sptm like @sptm ) AND ( splb like @splb )