有可能實作這樣的目標嗎?
- 假設
name和plural_name是 A??nimal 表的欄位。 - 假設
pluralise_animal是一個輔助函式,它接受一個字串并回傳其復數文字。 - 由于技術原因,我無法遍歷動物記錄。
- 這只是一個例子
Animal.update_all("plural_name = ?", pluralise_animal("I WANT THE ANIMAL NAME HERE, the `name` column's value"))
我想要類似于在修改列值時如何在 MySQL 中使用函式的東西。這是超出范圍還是可能的?
UPDATE animals SET plural_name = CONCAT(name, 's') -- just an example to explain what I mean by referencing a column. I'm aware of the problems in this example.
提前致謝
uj5u.com熱心網友回復:
由于技術原因,我無法遍歷動物記錄。
抱歉,此限制無法做到這一點。
如果您的復數輔助函式是在客戶端中實作的,那么您必須將資料值取回給客戶端,將它們復數,然后將它們發送回資料庫。
如果您希望 UPDATE 針對一組行運行而不將資料值回傳給客戶端,那么您必須在 SQL 運算式或存盤函式或其他東西中實作復數邏輯。
UPDATE 陳述句在資料庫引擎中運行。他們不能呼叫客戶端中的函式。
uj5u.com熱心網友回復:
使用 ruby?? 腳本生成 SQL 腳本,將復數值插入到臨時表中
File.open(filename, 'w') do |file|
file.puts "CREATE TEMPORARY TABLE pluralised_animals(id INT, plural varchar(50));"
file.puts "INSERT INTO pluralised_animals(id, plural) VALUES"
Animal.each.do |animal|
file.puts( "( #{animal.id}, #{pluralise_animal(animal.name)}),"
end
end
注意:用分號 (;) 替換結尾的逗號 (,)
然后在資料庫中運行生成的 SQL 腳本來填充臨時表。
最后在將臨時表連接到主表的資料庫中運行 SQL 更新陳述句...
UPDATE animals a
INNER JOIN pluralised_animals pa
ON a.id = pa.id
SET a.plural_name = pa.plural;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/436018.html
