2017-09-11 37 views
0

我不認爲這是可能的或者它是有道理的,但是這裏的大多數人都比我聰明得多,它從不會受傷。是否可以在公式爲數據庫中創建表格?我不是指查詢。我的意思是讓我說我​​有一張桌子,其中一列是「價格」,另一個是「數量」,我想要一列「成本」來計算(價格*數量)....隨着數據的導入。所以後來我可以:數據庫表中的公式/計算列

select * from table;

如果你告訴我,這是一個愚蠢的問題,我會理解,但我從內部客戶端得到它,需要調查它。我使用的db是BlueMix上的DB2。

回答

3

您可以爲成本列設置默認值

ALTER TABLE table-name ALTER COLUMN cost set cost=price*quantity; 

或者您可以創建如下觸發器,

db2 create trigger trigger_name after insert on table_name 
for each row mode db2sql begin atomic update tablle_name 
set cost=qty*price; end 
+0

謝謝你Jinesh。我有點希望你會告訴我,即使提出這個問題,我也很愚蠢.....但現在我必須這樣做:/謝謝 –

1

嘗試使用觸發器。您在這裏有一個教程: https://www.tutorialspoint.com/db2/db2_triggers.htm

數據庫觸發器是自動響應執行 某些事件

程序代碼
+0

謝謝vladatr。我有點希望你會告訴我,即使問這個問題我也很愚蠢.....但現在我必須這樣做:/謝謝 –

1

您可以使用計算列進行操作。在計算列中,您將給出默認公式

ALTER TABLE <TABLENAME> ADD <COLUMN_NAME> AS (<COLUMN_NAME1> * <COLUMN_NAME2>); 

因此,上述查詢僅用於相同的表格,您希望添加該列。 如果你想添加另一個表,有很多方法。

  1. 交易(其原因可能死鎖)
  2. 觸發器(它可能會導致服務器可能會慢)
  3. 存儲過程(普通插入語句使用SELECT子句)
  4. 沒有存儲過程我們可以用正常的insert語句來查詢。

實施例:

CREATE TABLE Cost_Table 
(
Cost int 
); 

INSERT INTO Cost_Table (Cost)<BR> 
SELECT price * quantity FROM Table_name; 

這是最優化的方式。我們可以使用上面的查詢來代替觸發器。 因此上面的查詢在事務和存儲過程中使用。

0

如果您不小心,可能會導致嚴重的安全漏洞。查找「SQL代碼注入」。

但是要做到這一點,另一條路線可能是在存儲過程中使用EXECUTE IMMEDEATE