程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 教你使用數組一樣使用數據表變量

教你使用數組一樣使用數據表變量

編輯:Oracle數據庫基礎

雖然你可以使用數組一樣使用一個數據表變量,對於它能夠使用的數據類型是有限制的。例如,你不能在一個數據表變量中包含另一個數據表變量。

你可以象申明一個用戶定義的數據表一樣申明一個數據表變量;但是,在你申明了它以後,你就不能再改變數據表的定義了。另外,你必須在申明的時候定義數據表變量的所有屬性。

並不是所有的INSERT命令都能夠在數據表變量上操作。例如,你不能在向數據表變量插入值的時候使用EXEC命令。執行一個存儲過程或者插入值到數據表變量的字符串命令會返回一個錯誤。同樣,不是所有的SELECT 命令都能夠在數據表變量上操作而且你不能使用SELECT INTO 命令來插入數據到一個數據表變量中去。

你不能在數據表變量上使用一些系統過程,比方sp_depends。數據表變量的對象名在運行時生成,並且是一個隨機的名字,它被保存在tempdb數據庫裡。因為大多數的系統功能和系統過程需要對象名或者標識數值,所以要在一個數據表變量上執行系統功能或者過程是困難的。需要復雜的邏輯來獲得對象的名字以及/或者標識數值來運行系統功能和過程。

一個數據表變量的作用域是批處理過程,存儲過程或者函數執行的過程。當批處理過程中GO命令被觸發了,數據表變量也就出離了它的作用域。

下面是在一個存儲過程中使用一個數據表變量的簡單腳本。

  

  CREATE PROCEDURE TestName

  

  AS

  

  DECLARE @TableId TABLE

  

  (table_id INT IDENTITY NOT NULL

  

  primary key nonclustered,

  

  id INT NOT NULL,

  

  name sysname NOT NULL

  

  DEFAULT 'UNKNOWN',

  

  type char(2) NOT NULL

  

  DEFAULT '9',

  

  crdate datetime NOT NULL

  

  DEFAULT current_timestamp)

  

  INSERT @TableId (id, name, type, crdate)

  

  SELECT id, 'test_' + name, type, crdate FROM tempdb..sysobjects

  

  SELECT * FROM @TableID

  

  GO

  

  exec TestName

  

  GO

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved