0

我使用SQL Server 2012,並正在尋找其替代變量的Oracle報表折算甲骨文聲明的替代變量尋找SQL轉換。正在使用

回答

1

我絕不是一個Oracle專家,但我認爲substition變量是特定於SQL * PLUS,而不是Oracle數據庫。

SQL * PLUS

define region=West 
define state=California 

UPDATE customers 
    SET region = '&region' 
    WHERE state = '&state' 

我的理解是,SQL * Plus將執行下列SQL:

UPDATE customers 
    SET region = 'West' 
    WHERE state = 'California' 

在MS SQL Server中的相當於2012將是:

Declare @Region varchar(100) 
Declare @State varchar(100) 

Set @Region = 'West' 
Set @State = 'California' 

Update Customers 
Set region = @Region 
Where State = @State 

或者你可能會失去所有變量,只需使用:

Update Customers 
Set Region = 'West' 
Where State = 'California' 

編輯:只有

更新影響當前表中的數據。如果您在以後的日期向表中添加更多數據,則需要再次運行更新。

例如

添加更多行的State「California」不會自動將Region列設置爲「West」插入的行。

還要確保您使用相同的數據類型(和長度)爲您的變量,你在你的表結構已經宣佈。

+0

感謝您的查詢,它真的幫助我!此外,我只是想知道,執行上述聲明意味着將來每當我插入值爲「加利福尼亞州」的狀態時,默認情況下會將值「西部」置於區域中,或者僅將值設置爲當前客戶表? –

+0

正在獲取「字符串或二進制數據將被截斷。 該語句已被終止。」即使在分配變量 –

+0

@PrincessS關於您的第一條評論之後,請參閱我的編輯。你的第二個評論;您需要確保變量(及其各自的值)的長度與表結構的數據類型相匹配。 – codingbadger

1

它將會像

Declare @State varchar(100) 
Declare @Region varchar(100) 

UPDATE customers 
SET region = @Region 
WHERE state = @State 
+1

您還需要爲您的變量賦值,否則它們將爲'NULL' – codingbadger

+0

@ xionutz2k:正在獲取「字符串或二進制數據將被截斷 該語句已被終止。執行此操作後的消息 –

+0

錯誤表明我們定義的@Region變量的長度超過了customers表中region列的長度。在定義變量時,我已經隨機選擇了100作爲長度,但您應該首先檢查表格列的長度。嘗試使用DESC客戶獲得表格的第一列(列及其數據類型) – xionutz2k