sql儲存過程中如何使用declare有的儲存過程宣告了,有的沒有宣告。請回答的詳細點。。謝謝

時間 2022-08-19 12:02:47

1樓:沐沐煙雨

如果你把儲存過程看作是批處理語句就好理解多了!

儲存過程只不過是乙個帶著名稱的sql批處理語句,如果在整個過程中需要變數時就是可以宣告,但該變數宣告後只能存活在批處理(儲存過程)的執行中,執行完畢後就會消失,這種宣告的格式就是

declare 變數名 型別

其中變數名為了與資料庫中的列名相互區別,所以變數名有乙個前置@符號,比如說

declare @count int

就是將變數@count宣告為int型別的,以後可以使用變數@count作為整型變數使用。在這裡可能有一些誤解,有人認為@count是變數名,也有人認為count是變數名,而@只是乙個符號,其實不管那一種理解對於宣告變數上來說是不影響的,事實上應該來說@count被稱為變數名較為合適些。

剛才說過,該變數宣告後只存活於批處理或是儲存過程的執行中而已,也就是說是乙個區域性變數,其實在sql中還有一種變數是全域性變數的,他們以@@開頭,但目前的sql中還不允許客戶自己的宣告全域性變數,只是系統中存的。比如查詢系統版本,就可以使用select @@version的方式進行檢視的。因為不能夠宣告,所以不與declare一塊使用的情況。

其實在sql中將變數一詞演譯的非常深,還有一類變數就是表名,列名,儲存過程等名稱,這些名稱其實也算是資料庫的全域性變數的,只要表存在,那麼表名一定會存在於master資料庫中的乙個表中,列名也是一樣,這一類的變數有乙個特殊,都是已經存在的boject的,所以不須要進行宣告,等於是建庫或表時進行了宣告,然後就可以了使用了,這種情況下的變數前邊是沒有@符號提示的。

所以一般情況下,我們只稱@前置的為變數,沒有前置的為資料庫相關變數,而@@是系統變數不須宣告。但只要是在使用@自定義的變數時,就必須選進行宣告,而其他的則不須要。

2樓:節子不哭

儲存過程既可以有declare語句,也可以沒有,declare宣告的是乙個語句塊,是pl/sql執行的基本單位,

案例:乙個基本的declare語句塊

declare

e_invalid_department exception; -- 宣告部分,給例外命名

begin

update departments

set department_name = 'oracle technology center'

where department_id = 60;

if sql%notfound then

raise e_invalid_department; -- 程式執行部分,使用raise 語句顯示丟擲例外

end if;

commit;

exception

when e_invalid_department then --例外處理部分,處理丟擲的例外

dbms_output.put_line('no such department id.');

end;

乙個簡單的儲存過程案例:

create procedure query_emp(p_id     in employees.employee_id%type,

p_name   out employees.last_name%type,

p_salary out employees.salary%type,

p_comm   out employees.commission_pct%type)

authid current_user is

begin

select last_name, salary, commission_pct

into p_name, p_salary, p_comm

from employees

where employee_id = p_id;

end query_emp;

在sql儲存過程中,如何宣告變數,賦值變數。最好有具體語句配上例項。3q啦。謝謝各位大俠的幫忙

3樓:匿名使用者

declare @a int

set @a=1

select @a

在儲存過程中使用引數什麼時候要用declare宣告,什麼情況下不要,麻煩高手指點一下,謝謝!!

4樓:匿名使用者

傳入的引數不要declare

過程內部的本地變數要declare

sql server的儲存過程的declare函式的使用?誰知道!

5樓:匿名使用者

前面的是引數, 是呼叫這個儲存過程的時候從外部輸入進來的。

declare 是宣告變數。

6樓:匿名使用者

變數是在批處理或過程的主體中用 declare 語句宣告的,並用 set 或 select 語句賦值。游標變數可使用此語句宣告,並可用於其他與游標相關的語句。所有變數在宣告後均初始化為 null。

transact-sql 語法約定語法 declare | | } [ ,...n] < table_type_definition > ::= table ( [ ,...

] ) < column_definition > ::= column_name [ collate collation_name ] [ [ default constant_expression ] | identity [ ( seed,increment ) ] ] [ rowguidcol ] [ < column_constraint > ] < column_constraint > ::= < table_constraint > ::

= ( column_name [ ,... ] ) | check ( search_condition ) }

7樓:匿名使用者

declare 就是申明乙個變數 declare @s varchar(max)就是申明乙個名字為s的varchar(max)型別變數!

8樓:匿名使用者

declare是宣告變數的,它也是乙個函式嗎

sql中什麼時候要用declare宣告變數?

9樓:匿名使用者

像這種問題,基本

來上沒有為啥...

淺顯點源:就是 人家開發sql server的時候,為了更加讓編譯器更加方便的識別使用者輸入的**.

就規定,如果是定義變數 那麼 必須要使用 declare 關鍵字.

那編譯器就很容易的知道. declare 空格後面的第乙個字串就是變數名了.

sql中declare是什麼意思

10樓:敲黑板劃重點

declare_serial,declare_serial / implement_serial 巨集的技術詳解*** declare_dynamic表明的是支援型別資訊。

declare_serial / implement_serial 巨集的技術詳解*** declare_dynamic表明的是支援型別資訊, 有了這個巨集,我們就可以判斷乙個類究竟是什麼類,比如

class a;

class b:public a;

a a;

b b;

11樓:

sql中declare是宣告的意思,就是宣告變數的,這個一般是用在函式和儲存過程中的。比如說,這個儲存過程是,只要你把學號輸入進來,就能查詢這個學生的班級。那麼在這個儲存過程裡面, 學號就是引數。

你給什麼學號, 它就返回給你相應的班級。又或者你也可以做成, 只要你輸入學號, 這個儲存過程就會將這個學生刪除。

mysql儲存過程中,定義變數有兩種方式:

1.使用set或select直接賦值,變數名以 @ 開頭.

例如:set @var=1;

可以在乙個會話的任何地方宣告,作用域是整個會話,稱為會話變數。

2.以 declare 關鍵字宣告的變數,只能在儲存過程中使用,稱為儲存過程變數,例如:

declare var1  int default 0;

主要用在儲存過程中,或者是給儲存傳引數中。

兩者的區別是:

在呼叫儲存過程時,以declare宣告的變數都會被初始化為 null。而會話變數(即@開頭的變數)則不會被再初始化,在乙個會話內,只須初始化一次,之後在會話內都是對上一次計算的結果,就相當於在是這個會話內的全域性變數。

在儲存過程中,使用動態語句,預處理時,動態內容必須賦給乙個會話變數。

例:set @v_sql= sqltext;

prepare stmt from @v_sql;

execute stmt;

deallocate prepare stmt;

有的時候在查詢更新資料庫的時候,需要多條語句的查詢,因此需要多次修改declare可以滿足多次執行,但資料只修改一次。

declare @local_variable data_typedeclare: 定義變數,變數第乙個字母是「@」

宣告時需要指定變數的型別,

可以使用set和select對變數進行賦值,在sql語句中就可以使用@local_variable來呼叫變數宣告中可以提供值,否則宣告之後所有變數將初始化為null。

12樓:

上面是引數,下面是宣告變數,引數就像方法裡傳遞的引數一樣,可以給引數賦值,輸出引數是輸出sql中需要反饋的值後面用out put定義的為輸出引數

13樓:糖糖寳寳

是宣告的意思,就是宣告變數的,例如:

declare v_number number(10);

v_char varchar2(20);

這個一般是用在函式和儲存過程中的.

14樓:匿名使用者

前面的是引數, 是呼叫這個儲存過程的時候從外部輸入進來的。

declare 是宣告變數。

比如說,

這個儲存過程是,只要你把學號輸入進來,

就能查詢這個學生的班級。

那麼在這個儲存過程裡面, 學號就是引數。

你給什麼學號, 它就返回給你相應的班級。

又或者你也可以做成, 只要你輸入學號, 這個儲存過程就會將這個學生刪除。

反正就是這個意思, 是很基礎的東西, 建議你還是看看書把~

15樓:

宣告變數

乙個輸入引數,乙個變數

有些儲存過程執行需要傳入各種引數以保證儲存過程有計畫,有順序的執行如:我想匯入2009年8月份的資料,如執行儲存過程,則需要把2009年8月份傳入給@dtime ,然後在執行

同樣,對於@xuehao,假如我想通過輸入乙個學號查出這個學號所對應的學生的資訊,則可以通過上述方式

16樓:匿名使用者

@xuehao char(8)

是輸入引數

declare @name

是變數

如何從sql2019儲存過程中獲取特定的字串

sql也可以拆分的,sqlserver快速查詢所有儲存過程中是否包含某字元 將text替換成你要查詢的內容 select name from sysobjects o,syscomments swhere o.id s.id and text like text and o.xtype p 將tex...

在sql儲存過程中rowcount0是什麼意思

rowcoun 返回受上一語句影響的行數。rowcount 0 查詢返回的記錄數不為零。1 rowcount 返回受上一語句影響的行數。2 語法 rowcount 返回型別 integer 3 注釋 任何不返回行的語句將這一變數設定為 0 如 if 語句。4 示例 下面的示例執行 update 語句...

sql 儲存過程建立和使用方法,SQL 儲存過程建立和使用方法

1 首先先建立乙個儲存過程,如圖,儲存過程主要的功能是為表jingyan插入新的資料。2 執行這幾行 看到執行成功,資料庫裡現在已經有儲存過程sp jy。3 先看下jingyan表裡目前的陣列,如圖,只有三行資料。4 在mysql裡,呼叫儲存過程,只需要用call關鍵字,帶上儲存過程的名稱就行了,當...

如何在oracle儲存過程中drop序列和序列

1 首先要保證該資料庫使用者有刪除序列和新建序列的許可權,儲存過程中這個許可權要顯示賦權 grant create sequence to 資料庫使用者 grant drop any sequence to 資料庫使用者 2 儲存過程中建立序列和刪除序列 建立序列 execute immediate...

如何使用SQL變數獲取儲存過程的返回值

sql server中儲存過程的返回值不是通過return語句返回的 return語句是在使用者自定義函式中使用的 而是通過儲存過程的引數來返回,在定義儲存過程的引數時使用關鍵字output來指定此引數是返回值。而在呼叫儲存過程時,也必須使用關鍵字給接收返回值的變數,這樣才能在呼叫時獲得儲存過程的返...