Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara membuat kolom bukan nol dalam tampilan

Anda tidak dapat menambahkan batasan bukan nol atau memeriksa tampilan; lihat ini dan di halaman yang sama 'Pembatasan pada NOT NULL Constraints' dan 'Restrictions on Check Constraints'. Anda dapat menambahkan with check option (terhadap klausa where yang berlebihan) ke tampilan tetapi itu tidak akan ditandai sebagai not null dalam kamus data.

Satu-satunya cara yang saya pikirkan untuk mendapatkan efek ini adalah, jika Anda menggunakan 11g, tambahkan nilai pemeran sebagai kolom virtual di atas meja, dan (jika masih diperlukan) buat tampilan yang bertentangan dengan itu:

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

Karena Anda mengatakan dalam komentar di dba.se bahwa ini untuk mengejek sesuatu, Anda dapat menggunakan kolom normal dan pemicu untuk mensimulasikan kolom virtual:

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

Dan desc "MyView" masih memberikan:

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

Seperti yang disebutkan Leigh (juga di dba.se), jika Anda memang ingin menyisipkan/memperbarui tampilan, Anda dapat menggunakan instead of pemicu, dengan VC atau versi palsu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana memulihkan database menggunakan RMAN

  2. Masukkan CLOB ke dalam database Oracle

  3. Fungsi PL/SQL di Oracle tidak dapat melihat DBMS_AQ

  4. Jika pernyataan dalam klausa Where

  5. Perbedaan konversi implisit aliran data CAST vs ssis