許可權控制下的SQL寫法
1. 物料類別表(樹狀關係 起點 為 parent_id = 0 )
CREATE TABLE T_MATERIAL_TYPE (
ID NUMBER(10) PRIMARY KEY,
MT_CODE VARCHAR2(20),
MT_NAME VARCHAR2(20),
PARENT_ID NUMBER(10)
)
INSERT INTO T_MATERIAL_TYPE VALUES(1,'A','產成品',0);
INSERT INTO T_MATERIAL_TYPE VALUES(2,'B','半成品',0);
INSERT INTO T_MATERIAL_TYPE VALUES(3,'C','原材料',0);
INSERT INTO T_MATERIAL_TYPE VALUES(4,'A','燈盤類',1);
2.物料表
CREATE TABLE T_MATERIAL_DETAIL(
ID NUMBER(10) PRIMARY KEY,
MD_CODE VARCHAR2(20),
MD_NAME VARCHAR2(20),
MT_ID NUMBER(10)
)
INSERT INTO T_MATERIAL_DETAIL
VALUES(1,'AA000001','1#燈盤',4);
3. 使用者可操作物料類別 表
CREATE TABLE T_SYS_OPER_MATERIAL_TYPE
( ID NUMBER(10) PRIMARY KEY,
O_ID NUMBER(10) , --------使用者id
MT_ID NUMBER(10) -- 物料類別id
)
使用者表就不理它了.
加一條記錄進去
INSERT INTO T_SYS_OPER_MATERIAL_TYPE
VALUES(1,1,4);
現在使用者 要過濾物料, 這個語句就不是很好寫.
我的寫法是 先 查詢 物料是否存在, 然後 ,判斷 存在的物料的類別是否在使用者的可操作物料類別中.
SELECT ID, G_CODE ACODE, G_NAME ANAME
FROM T_MATERIAL_DETAIL A
WHERE (A.G_CODE LIKE '%條件%' OR A.G_NAME LIKE '%條件%')
AND EXISTS (SELECT 1
FROM (
SELECT ID FROM T_MATERIAL_CODING_METHOD MC
CONNECT BY PRIOR ID = PARENT_ID
START WITH EXISTS
(SELECT 1
FROM T_SYS_OPERATOR_MATERIAL OM
WHERE OM.O_ID = 1
AND MC.ID = OM.M_ID)) T1
WHERE T1.ID = A.CM_ID)
好像走的都是全表掃描 . 不知道 大家怎麼處理 這種情況.
CREATE TABLE T_MATERIAL_TYPE (
ID NUMBER(10) PRIMARY KEY,
MT_CODE VARCHAR2(20),
MT_NAME VARCHAR2(20),
PARENT_ID NUMBER(10)
)
INSERT INTO T_MATERIAL_TYPE VALUES(1,'A','產成品',0);
INSERT INTO T_MATERIAL_TYPE VALUES(2,'B','半成品',0);
INSERT INTO T_MATERIAL_TYPE VALUES(3,'C','原材料',0);
INSERT INTO T_MATERIAL_TYPE VALUES(4,'A','燈盤類',1);
2.物料表
CREATE TABLE T_MATERIAL_DETAIL(
ID NUMBER(10) PRIMARY KEY,
MD_CODE VARCHAR2(20),
MD_NAME VARCHAR2(20),
MT_ID NUMBER(10)
)
INSERT INTO T_MATERIAL_DETAIL
VALUES(1,'AA000001','1#燈盤',4);
3. 使用者可操作物料類別 表
CREATE TABLE T_SYS_OPER_MATERIAL_TYPE
( ID NUMBER(10) PRIMARY KEY,
O_ID NUMBER(10) , --------使用者id
MT_ID NUMBER(10) -- 物料類別id
)
使用者表就不理它了.
加一條記錄進去
INSERT INTO T_SYS_OPER_MATERIAL_TYPE
VALUES(1,1,4);
現在使用者 要過濾物料, 這個語句就不是很好寫.
我的寫法是 先 查詢 物料是否存在, 然後 ,判斷 存在的物料的類別是否在使用者的可操作物料類別中.
SELECT ID, G_CODE ACODE, G_NAME ANAME
FROM T_MATERIAL_DETAIL A
WHERE (A.G_CODE LIKE '%條件%' OR A.G_NAME LIKE '%條件%')
AND EXISTS (SELECT 1
FROM (
SELECT ID FROM T_MATERIAL_CODING_METHOD MC
CONNECT BY PRIOR ID = PARENT_ID
START WITH EXISTS
(SELECT 1
FROM T_SYS_OPERATOR_MATERIAL OM
WHERE OM.O_ID = 1
AND MC.ID = OM.M_ID)) T1
WHERE T1.ID = A.CM_ID)
好像走的都是全表掃描 . 不知道 大家怎麼處理 這種情況.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/554557/viewspace-531759/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Solaris下控制ftp的許可權FTP
- 下載許可權控制機制
- Elasticsearch 許可權控制Elasticsearch
- Linux的許可權控制Linux
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- sql許可權管理SQL
- 填報表上下載檔案控制元件可寫許可權控制控制元件
- Linux許可權控制Linux
- Appfuse:許可權控制APP
- 資料分析的許可權控制
- SQL Server 許可權管理SQLServer
- Laravel實現許可權控制Laravel
- mysql 許可權控制筆記MySql筆記
- oracle列級許可權控制Oracle
- sql server的許可權查詢SQLServer
- .NET 程式許可權控制、獲得管理員許可權程式碼
- 打造自己的系統許可權控制
- OGG的加密和許可權控制加密
- React基於RBAC的許可權控制React
- casbin基於golang的許可權控制Golang
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- 小知識:軟體開發的許可權控制和許可權驗證
- Linux下ACL許可權控制以及用sudo設定使用者對命令的執行許可權Linux
- SQL Server許可權問題SQLServer
- 許可權控制及AOP日誌
- Java 訪問許可權控制(6)Java訪問許可權
- vue-router控制路由許可權Vue路由
- 資料安全之許可權控制
- k8s結合jumpserver做kubectl許可權控制 使用者在多個namespaces的訪問許可權 rbac許可權控制K8SServernamespace訪問許可權
- 呼叫者許可權與定義者許可權的pl/sql子程式SQL
- Linux 下許可權的管理Linux
- 淺談 Orbeon form builder 的許可權控制ORBORMUI
- CRM Transaction處理中的許可權控制
- asp.net 2.0 許可權樹的控制ASP.NET
- AIX 的許可許可權(轉)AI
- 一對一原始碼,前端頁面許可權和按鈕許可權控制原始碼前端
- MYSQL學習筆記13: DCL許可權控制(使用者許可權操作)MySql筆記
- 使用nginx控制ElasticSearch訪問許可權NginxElasticsearch訪問許可權