sql >> Databasteknik >  >> RDS >> Oracle

Hur man skapar en kolumn som inte är null i en vy

Du kan inte lägga till en noll- eller kontrollbegränsning i en vy; se detta och på samma sida 'Restrictions on NOT NULL Constraints' och 'Restrictions on Check Constraints'. Du kan lägga till en with check option (mot en redundant where-klausul) till vyn men som inte markeras som not null i dataordboken.

Det enda sättet jag kan tänka mig för att få den här effekten är, om du är på 11g, att lägga till castvärdet som en virtuell kolumn på bordet och (om det fortfarande behövs) skapa vyn mot det:

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

Eftersom du sa i en kommentar på dba.se att det här är för att håna något så kan du använda en vanlig kolumn och en trigger för att simulera den virtuella kolumnen:

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

Och desc "MyView" ger fortfarande:

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

Som Leigh nämnde (även på dba.se), om du ville infoga/uppdatera vyn kan du använda en instead of trigger, med VC eller falsk version.



  1. Lagra en fil i en databas i motsats till filsystemet?

  2. ROWIDTOCHAR() Funktion i Oracle

  3. Hur man använder en Oracle Associative Array i en SQL-fråga

  4. TOP 5 MySQL Ta bort syntax med tips för T-SQL-utvecklare