-- 登錄驗證後設置全局變量 :GLOBAL.USER_ROLE
IF :GLOBAL.USER_ROLE = 'READ_ONLY' THEN
SET_MENU_PROPERTY('MENU_SALARY', ENABLED, PROPERTY_FALSE);
SET_ITEM_PROPERTY('SALARY_ITEM', ENABLED, PROPERTY_FALSE);
SET_ITEM_PROPERTY('SALARY_ITEM', UPDATE_ALLOWED, PROPERTY_FALSE);
END IF;
通過禁用菜單項、設置數據項 UPDATE_ALLOWED=FALSE 實現細粒度只讀控制。
原查詢 (4 分鐘):
SELECT RECORDNO, NAME, AGE
FROM Table1
WHERE Table1.RECORDNO NOT IN (SELECT RECORDNO FROM Table2 WHERE BIRTHDAY='710618');
優化後 (50 秒):
SELECT Table1.RECORDNO, Table1.NAME, Table1.AGE
FROM Table1, Table2
WHERE Table1.RECORDNO = Table2.RECORDNO(+)
AND Table2.RECORDNO IS NULL
AND Table2.BIRTHDAY(+) = '710618';
原理:NOT IN 觸發全表掃描 + 子查詢逐行過濾;外連接 + IS NULL 利用索引嵌套循環,邏輯等價但執行計劃優化。
.pll 文件。Attached Libraries 節點附加該庫(提示刪除路徑選 No 保留相對路徑)。WHERE col LIKE '%' 不匹配 NULL,需 OR col IS NULL。UNION 預設按第一列排序,非按編寫順序。需在各子查詢第一列加排序序號:SELECT 1 AS seq, ... UNION SELECT 2, ...。CREATE VIEW RYTJ (UNIT, BOY, GIRL) AS
SELECT UNIT,
SUM(DECODE(SEX,'男',1,0)),
SUM(DECODE(SEX,'女',1,0))
FROM Table1
GROUP BY UNIT;
報表直接基於視圖 RYTJ 設計,數據源變更只改視圖,前端報表零修改。
Data Model → 查詢組 → 新增公式列 CF_XH (NUMBER) → 初值 0 → 編輯公式:RETURN(:CF_XH + 1)。報表運行時自動遞增顯示 1,2,3…