最近因為要參與公司的狐小E項目(https://www.hixiaoe.com/),需要學習Mysql數據庫,項目中需要實現一個動態視圖,但是Mysql的視圖在創建時無法綁定用戶變量,經過一番搜索發現了解決的辦法,在這里寫一寫記錄這個過程,也再分享給大家,希望大家一起學習,進步。
首先啥是動態視圖,大家可不要當成是Oracle的動態性能視圖,我這里說的動態視圖是指,一個取數據的視圖,條件固定,但是參數不固定。給大家簡單說一說我對動態視圖的理解。
系統有一張訂單表。不同的人看到的數據范圍也不同,數據的權限分成4個級別,個人,部門,上下級部門,所有。
表的結構下圖(字段等沒有列全),大家注意紅色框內的字段。
Ownerid是訂單的負責人字段,ownerdeptid是負責人部門字段,我們通過這兩個字段來實現不同的人看不同數據。
以下帖一段偽碼來讓大家理解一下我的構想。
“查詢人對t_order權限”、“當前查詢人ID”、“當前查詢人部門”,這些都是用戶變量,Mysql里在創建視圖的時候是不能寫用戶變量的。但是我們可以繞個圈子來實現,在Mysql的視圖創建時,是可以寫函數的,我們把需要的用戶變量寫在函數里,然后在創建視圖的時候調用,這樣就可以了。
先來看一下不用函數的情況下報什么錯
如果不用函數把用戶變包起來,創建視圖不會成功,會報 Error Code: 1351. View's SELECT contains a variable or parameter 的錯誤。
把用戶變量替換成函數,再執行一下看看。
來給大家看看函數里寫了什么
就是直接返回你想要的用戶變量。
很高興能夠參加公司狐小E(https://www.hixiaoe.com/)的項目開發,學習Mysql的更多知識,謝謝大家的幫助,讓我能夠在這個項目里快速成長起來。