我需要參數化一個視圖,我通過創建一個具有視圖參數的TEMP TABLE
來實現。在VIEW上觸發器中訪問TEMP TABLE
CREATE TEMP TABLE parms (parm1 INTEGER, parm2 INTEGER);
CREATE VIEW tableview AS ...
的VIEW
是相當複雜的,但它基本上使用這兩個參數來啓動一個遞歸CTE,並沒有說我已經找到表達沒有這些參數視圖中的任何其他方式。
參數必須存儲在臨時表中,因爲每個連接都應該能夠使用不同的參數來擁有自己的視圖。
在任何情況下,這工作正常創建視圖本身,只要我創建相同TEMP TABLE
在使用該視圖的任何查詢,如開始:我能做到
CREATE TEMP TABLE parms (parm1 INTEGER, parm2 INTEGER);
INSERT INTO parms (parm1,parm2) VALUES (5,66);
SELECT * FROM tableview;
同樣的事情,以創建一個觸發器,以允許在視圖插入:
CREATE TEMP TABLE parms (parm1 INTEGER, parm2 INTEGER);
CREATE TRIGGER tableinsert INSTEAD OF INSERT ON tableview ...
然而,當我嘗試做一個實際的INSERT
(重新創建TEMP TABLE
首先作爲前)我得到一個錯誤:
no such table: main.parms
如果我創建一個非臨時表,我不會得到這個錯誤,但然後我有問題,不同的連接不能有自己單獨的視圖。
我已閱讀documentation for triggers,它提到了在非臨時表上使用臨時觸發器的注意事項,但我沒有看到有關反向的任何內容。
我確實在其他地方找到了一個引用,表明「該表...必須與觸發器所附的表或視圖存在於同一個數據庫中」。我認爲臨時表是當前數據庫的一部分,這是不是真的?有什麼方法可以使這個真實嗎?
我也試過訪問parms
表作爲temp.parms
在觸發器,但得到的錯誤:
qualified table names are not allowed on INSERT, UPDATE, and DELETE
statements within triggers
如果我不能使用臨時表,是有一些方法來解決它來完成一樣?
更新:好的,所以它似乎是一個SQLite的限制。在SQLite源代碼中挖掘了一下之後,似乎很容易讓SELECT
訪問觸發器中的臨時表。但是,允許UPDATE
訪問似乎要困難得多。