有沒有辦法在 Oracle SQL 資料庫中“隱藏”一行而不洗掉它,這樣它仍然在資料庫中但不會作為搜索結果顯示在網頁上?
例如,我想在網頁上搜索城市時隱藏資料庫中的特定城市,使其不顯示在結果中。
uj5u.com熱心網友回復:
向表中添加一列,并帶有關于是否顯示或隱藏行的標志,然后WHERE向查詢添加過濾器以過濾掉應隱藏該行的行。
如果你有桌子:
CREATE TABLE cities (name) AS
SELECT 'Berlin' FROM DUAL UNION ALL
SELECT 'Lisbon' FROM DUAL UNION ALL
SELECT 'Prague' FROM DUAL UNION ALL
SELECT 'Amsterdam' FROM DUAL UNION ALL
SELECT 'Kiev' FROM DUAL;
然后您可以執行以下操作:
ALTER TABLE cities
ADD visibility NUMBER(1,0)
INVISIBLE
DEFAULT 1
CONSTRAINT cities__visibility__chk CHECK (visibility IN (0,1));
(注意:INVISIBLE使用時會導致一列不顯示SELECT * FROM cities,如果命名列仍然可以顯示SELECT name, visibility FROM cities。)
然后將一行設定為不可見:
UPDATE cities
SET visibility = 0
WHERE name = 'Amsterdam';
然后:
SELECT *
FROM cities
WHERE visibility = 1;
輸出:
姓名 柏林 里斯本 布拉格 基輔
db<>在這里擺弄
uj5u.com熱心網友回復:
@MR0 的解決方案很棒,但是根據您的可用性要求(即停機時間是否可用),您可以考慮將VISIBILITY列隱藏在視圖中,而不是使用INVISIBLE屬性。
ALTER TABLE cities RENAME to cities_table;
CREATE VIEW cities AS
SELECT name FROM cities_table
WHERE visibility = 1;
-- copy privileges of cities_table to cities view
GRANT SELECT ON cities TO user1;
...
優點:
- 使用不更改現有代碼
CITIES
缺點:
CITIES在重命名表和授予權限之間變得不可用- 許多依賴的物件
CITIES將變得無效。但是 Oracle 應該在使用時自動重新編譯它們。 - 假設是表的 DDL
CITIES將失敗(例如,TRUNCATE TABLE CITIES;) - 添加列時需要同時修改視圖和表格
- 視圖決議的潛在性能影響(應該無法檢測到)
弊端雖多,但視實際情況而定,單親可能利大于弊。
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/441437.html
上一篇:Kotlin房間資料庫布林值
