我嘗試將集合表中的副本行自動化爲專用表。 有時專用表不存在,因此我檢查是否存在,如果需要,我在複製該行之前創建表。 此代碼包含在MariaDB的MySQL#1422在存儲函數或觸發器中不允許顯式或實施提交
從表「allwelds」我想知道列項目名的內容最新的插排的觸發器,完整的行必須在表中插入的名稱ProjectName 首先我檢查表格的存在。 如果該表不存在(選擇返回0),我使用變量名稱「qname」創建表並在其中插入完整的行。 如果表中存在(select返回1)與變量「qname的」
下面的代碼會導致以下錯誤的名所行的行插入表中:
MySQL的#1422顯式或implecit承諾不允許存儲的功能或觸發器
BEGIN
DECLARE qname Varchar(24) DEFAULT "EMPTY";
DECLARE qid INT DEFAULT 0;
DECLARE table_exist INT DEFAULT 5;
SELECT id, ProjectName INTO qid, qname FROM allwelds WHERE id = (SELECT MAX(id) FROM allwelds);
SELECT count(*) into table_exist FROM information_schema.TABLES WHERE (TABLE_SCHEMA = 'ugm') AND (TABLE_NAME = qname);
CASE table_exist
WHEN 0 THEN
CREATE TABLE qname (id int, Datum date, Tijd time, ProjectName Varchar(24), ...........etc, etc, .......................);
INSERT INTO qname (id, Datum, Tijd, ProjectName, , ...........etc, etc, .......................)
SELECT id, date(timestamp), time(timestamp), , ...........etc, etc, .......................); FROM `allwelds` WHERE id = qid;
WHEN 1 THEN
INSERT INTO qname (id, Datum, Tijd, ProjectName, , ...........etc, etc, .......................)
SELECT id, date(timestamp), time(timestamp), , ...........etc, etc, .......................); FROM `allwelds` WHERE id = qid;
END CASE;
END
任何人都可以使用這段代碼嗎?
創建一個表涉及一個隱式提交...你不能從觸發器創建一個表 –
你的第一句話是顯示實際的問題 - 在SQL中,你不檢查表是否存在 - 你認爲它確實存在。如果它不存在,則會通過從數據庫中創建表獲得一個您不能從中恢復的錯誤。我明白,儘量避免麻煩,但動態創建表格不是答案。它不可維護,它包含魔法,它可能是調試的噩夢。如果你簡單地假設表格存在,你的問題就會消失。如果沒有 - 你的系統需要某種遷移腳本,它將在第一次運行時創建表格。 – Mjh