Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách tạo cột không rỗng trong dạng xem

Bạn không thể thêm ràng buộc not null hoặc check vào một dạng xem; xem phần này và trên cùng trang 'Hạn chế về Ràng buộc KHÔNG ĐẦY ĐỦ' và 'Hạn chế về Ràng buộc Kiểm tra'. Bạn có thể thêm with check option (đối với mệnh đề where dư thừa) đối với dạng xem nhưng nó sẽ không được đánh dấu là not null trong từ điển dữ liệu.

Cách duy nhất tôi có thể nghĩ để có được hiệu ứng này là, nếu bạn đang ở 11g, hãy thêm giá trị truyền dưới dạng một cột ảo trên bảng và (nếu nó vẫn cần thiết) tạo chế độ xem dựa trên điều đó:

ALTER TABLE "MyTable" ADD "MyBDColumn" AS
    (CAST("MyColumn" AS BINARY_DOUBLE)) NOT NULL;

CREATE OR REPLACE VIEW "MyView" AS
SELECT
    "MyBDColumn" AS "MyColumn"
FROM "MyTable";

desc "MyView"

 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 MyColumn                                  NOT NULL BINARY_DOUBLE

Vì bạn đã nói trong một nhận xét trên dba.se rằng đây là để chế nhạo một cái gì đó, bạn có thể sử dụng cột bình thường và một trình kích hoạt để mô phỏng cột ảo:

CREATE TABLE "MyTable" 
(
  "MyColumn" NUMBER NOT NULL,
  "MyBDColumn" BINARY_DOUBLE NOT NULL
);

CREATE TRIGGER "MyTrigger" before update or insert on "MyTable"
FOR EACH ROW
BEGIN
    :new."MyBDColumn" := :new."MyColumn";
END;
/

CREATE VIEW "MyView" AS
SELECT
    "MyBDColumn" AS "MyColumn"
FROM "MyTable";

INSERT INTO "MyTable" ("MyColumn") values (2);

SELECT * FROM "MyView";

  MyColumn
----------
  2.0E+000

desc "MyView" vẫn cho:

 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 MyColumn                                  NOT NULL BINARY_DOUBLE

Như Leigh đã đề cập (cũng trên dba.se), nếu bạn muốn chèn / cập nhật chế độ xem, bạn có thể sử dụng instead of kích hoạt, với VC hoặc phiên bản giả mạo.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cx_Oracle:Làm cách nào để nhận từng hàng dưới dạng từ điển?

  2. Tổng hợp dữ liệu bằng các hàm nhóm (nhóm theo oracle)

  3. Hàm RAWTOHEX () trong Oracle

  4. Làm thế nào để gỡ lỗi ORA-01775:lặp lại chuỗi từ đồng nghĩa?

  5. Cách lấy thông tin về lỗi biên dịch trong Oracle / TOAD