當前位置:首頁 » 存儲配置 » 釋放存儲過程

釋放存儲過程

發布時間: 2023-04-28 07:02:29

A. oracle刪除一些表數據,然後釋放表空間的存儲過程

create or replace procere ttt is
begin
delete from bbb where。。。。。。 ;
commit;
execute immediate 'create table aaa as select * from bbb';
commit;
--刪除表bbb所有數據
execute immediate 'truncate table bbb';
commit;
--將臨時表aaa的數據轉移到bbb表中
insert into bbb select * from aaa;
commit;
--刪除臨時表aaa
execute immediate 'drop table aaa';
commit;
end;

順便說一句,你之前為什麼要delete表bbb里的數據呢?還有,你存儲過程里沒end
---------補充------
||是用來區分普通欄位和變數欄位的
他那個寫法不和我這個一樣嗎?

他那個只不過把我單引號里的sql設置成了一個變數,叫str

B. 如何在存儲過程判斷游標是否被釋放

可以用變數標識一下,打開游標的時候變數變為true,關閉的時候變為false,你可以想想思路

C. SQL server2008 臨時表tempdb如何自動釋放存儲空間

sql server中如何創建,使用,釋放臨時表
drop table #Tmp --刪除臨時表#Tmpcreate table #Tmp --創建臨時表#Tmp( ID int IDENTITY (1,1) not null, --創建列ID,並且每次新增一條記錄就會加1 WokNo varchar(50), primary key (ID) --定義ID為臨時表#Tmp的主鍵 );Select * from #Tmp --查詢臨時表的數據truncate table #Tmp --清空臨時表的所有數據和約束
相關例子:
Declare @Wokno Varchar(500) --用來記錄職工號Declare @Str NVarchar(4000) --用來存放查詢語句Declare @Count int --求出總記錄數 Declare @i intSet @i = 0 Select @Count = Count(Distinct(Wokno)) from #TmpWhile @i < @Count Begin Set @Str = 'Select top 1 @Wokno = WokNo from #Tmp Where id not in (Select top ' + Str(@i) + 'id from #Tmp)' Exec Sp_ExecuteSql @Str,N'@WokNo Varchar(500) OutPut',@WokNo Output Select @WokNo,@i --一行一行把職工號顯示出來 Set @i = @i + 1 End臨時表可以創建本地和全局臨時表。本地臨時表僅在當前會話中可見;全局臨時表在所有會話中都可見。
本地臨時表的名稱前面有一個編號符 (#table_name),而全局臨時表的名稱前面有兩個編號符 (##table_name)。
SQL 語句使用 CREATE TABLE 語句中為 table_name 指定的名稱引用臨時表:
CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)INSERT INTO #MyTempTable VALUES (1)
如果本地臨時表由存儲過程創建或由多個用戶同時執行的應用程序創建,則 SQL Server 必須能夠區分由不同用戶創建的表。為此,SQL Server 在內部為每個本地臨時表的表名追加一個數字後綴。存儲在 tempdb 資料庫的 sysobjects 表中的臨時表,其全名由 CREATE TABLE 語句中指定的表名和系統生成的數字後綴組成。為了允許追加後綴,為本地臨時表指定的表名 table_name 不能超過 116 個字元。
除非使用 DROP TABLE 語句顯式除去臨時表,否則臨時表將在退出其作用域時由系統自動除去:
當存儲過程完成時,將自動除去在存儲過程中創建的本地臨時表。由創建表的存儲過程執行的所有嵌套存儲過程都可以引用此表。但調用創建此表的存儲過程的進程無法引用此表。
所有其它本地臨時表在當前會話結束時自動除去。
全局臨時表在創建此表的會話結束且其它任務停止對其引用時自動除去。任務與表之間的關聯只在單個 Transact-SQL 語句的生存周期內保持。換言之,當創建全局臨時表的會話結束時,最後一條引用此表的 Transact-SQL 語句完成後,將自動除去此表。 在存儲過程或觸發器中創建的本地臨時表與在調用存儲過程或觸發器之前創建的同名臨時表不同。如果查詢引用臨時表,而同時有兩個同名的臨時表,則不定義針對哪個表解析該查詢。嵌套存儲過程同樣可以創建與調用它的存儲過程所創建的臨時表同名的臨時表。嵌套存儲過程中對表名的所有引用都被解釋為是針對該嵌套過程所創建的表,例如:
CREATE PROCEDURE Test2ASCREATE TABLE #t(x INT PRIMARY KEY)INSERT INTO #t VALUES (2)SELECT Test2Col = x FROM #tGOCREATE PROCEDURE Test1ASCREATE TABLE #t(x INT PRIMARY KEY)INSERT INTO #t VALUES (1)SELECT Test1Col = x FROM #tEXEC Test2GOCREATE TABLE #t(x INT PRIMARY KEY)INSERT INTO #t VALUES (99)GOEXEC Test1GO
下面是結果集:
(1 row(s) affected)
Test1Col ----------- 1
(1 row(s) affected)
Test2Col ----------- 2
當創建本地或全局臨時表時,CREATE TABLE 語法支持除 FOREIGN KEY 約束以外的其它所有約束定義。如果在臨時表中指定 FOREIGN KEY 約束,該語句將返回警告信息,指出此約束已被忽略,表仍會創建,但不具有 FOREIGN KEY 約束。在 FOREIGN KEY 約束中不能引用臨時表。
考慮使用表變數而不使用臨時表。當需要在臨時表上顯式地創建索引時,或多個存儲過程或函數需要使用表值時,臨時表很有用。通常,表變數提供更有效的查詢處理。

D. 如何強行中止存儲過程的執行

找你的DBA把你這個session給KILL掉

E. 6、什麼是存儲過程什麼是游標,何時使用、何時不用游標

存儲過程是一組命名了的SQL語句集合,是為了完成特定功能匯集而成的。該集合編譯後存放在資料庫中,可根據實際情況重新編譯,可直接運行,也可遠程運行且存儲過程直接在伺服器端運行。

游標實際上是一種能從包括多條數據記錄的結果集(結果集是select查詢之後返回的所有行數據的集合)中每次提取一條記錄的機制充當指針的作用,遍歷結果中的所有行,但他一次只指向一行。

游標在循環處理欄位的時候使用

建議:盡量避免使用游標,因為游標的效率較差,如果游標操作的數據超過1萬行,那麼就應該考慮改寫;使用基於游標的方法或臨時表方法之前,應先尋找基於集的解決方案來解決問題,基於集的方法通常更有效;與臨時表一樣,游標並不是不可使用。

F. 存儲過程跟游標之間有什麼關聯么

兩者沒有什麼必然的聯系
游標一般不單獨使用,可以在存儲過程\函數等手嫌中使用,使畢搏手用完後要關閉釋放。
存儲過程可以是一個對象,存儲起來,下銀鍵次再調用。

G. sqlServer中存儲過程在資料庫中是怎樣存儲的

存儲過程在資料庫中,是以對象存儲的sysobject,就象表,存儲過程的內容是會存儲在一個細表裡,按255個字元拆分為一條記錄,直到完畢

H. 存儲過程裡面的臨時表,被查詢一次就被自動釋放掉

存儲過程裡面的臨時表在你調用完存儲過程以後,當然會自動釋放!!!

I. mysql 存儲過程怎麼調用

php調用mysql存儲過程和函數的方法
存儲過程和函數是MySql5.0剛剛引入的。關於這方面的操作在PHP裡面沒有直接的支持。但是由於Mysql PHP API的設計,使得我們可以在以前的PHP版本中的mysql php api中支持存儲過程和函數的調用。

在php中調用存儲過程和函數。

1。調用存儲過程的方法。

a。如果存儲過程有 IN/INOUT參數,聲明一個變數,輸入參數給存儲過程,該變數是一對,

一個php變數(也可以不必,只是沒有php變數時,沒有辦法進行動態輸入),一個Mysql

變數。

b。如果存儲過程有OUT變數,聲明一個Mysql變數。

mysql變數的聲明比較特殊,必須讓mysql伺服器知道此變數的存在,其實也就是執行一條mysql語句。

入set @mysqlvar=$phpvar ;

c。使用mysql_query()/mysql_db_query()執行mysql 變數聲明語句。

mysql_query("set @mysqlvar=$pbpvar");

這樣,在mysql伺服器裡面就有一個變數,@mysqlar。如果是IN參數,那麼其值可以由phpar傳入。

d。 如果是存儲過程。

1。執行 call procere()語句。

也就是mysql_query("call proceer([var1]...)");

2. 如果有返回值,執行select @ar,返回執行結果。

mysql_query("select @var)"

接下來的操作就和php執行一般的mysql語句一樣了。可以通過mydql_fetch_row()等函數獲得結果。

如果時函數。 直接執行 select function() 就可以了。
$host="localhost";
$user="root";
$password="11212";
$db="samp_db";
$dblink=mysql_connect($host,$user,$password)
or die("can't connect to mysql");
mysql_select_db($db,$dblink)
or die("can't select samp_db");
$res=mysql_query("set @a=$password",$dblink);
$res=mysql_query("call aa(@a)",$dblink);
$res=mysql_query("select @a",$dblink);
$row=mysql_fetch_row($res);
echo $row[0];

熱點內容
引用jar怎麼發布到伺服器 發布:2025-02-12 01:07:44 瀏覽:333
舊電腦開伺服器 發布:2025-02-12 01:02:50 瀏覽:277
電腦伺服器兩個電源什麼意思 發布:2025-02-12 00:55:15 瀏覽:220
linux外網不能訪問埠 發布:2025-02-12 00:55:13 瀏覽:438
安卓系統哪裡可以看充電次數 發布:2025-02-12 00:53:53 瀏覽:723
如何選物理伺服器cpu 發布:2025-02-12 00:48:22 瀏覽:68
怎麼買編程 發布:2025-02-12 00:31:42 瀏覽:932
固態硬碟如何做緩存檔 發布:2025-02-12 00:19:48 瀏覽:519
cm13源碼下載 發布:2025-02-12 00:13:58 瀏覽:554
lang編譯器 發布:2025-02-12 00:13:56 瀏覽:561