sql >> Database >  >> RDS >> Oracle

Een niet-nulkolom in een weergave maken

U kunt geen niet-null- of controlebeperking aan een weergave toevoegen; zie dit en op dezelfde pagina 'Beperkingen op NOT NULL Constraints' en 'Beperkingen op Check Constraints'. U kunt een with check option (tegen een overbodige waar-clausule) aan de weergave, maar die wordt niet gemarkeerd als not null in de datadictionary.

De enige manier die ik kan bedenken om dit effect te krijgen, is, als je 11g gebruikt, om de cast-waarde als een virtuele kolom op de tafel toe te voegen, en (als het nog steeds nodig is) de weergave daartegenover te creëren:

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

Aangezien je in een opmerking op dba.se zei dat dit bedoeld is om iets te bespotten, zou je een normale kolom en een trigger kunnen gebruiken om de virtuele kolom te simuleren:

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

En desc "MyView" geeft nog steeds:

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

Zoals Leigh al zei (ook op dba.se), als u de weergave wilt invoegen/bijwerken, kunt u een instead of gebruiken trigger, met de VC of nepversie.



  1. Een relatie maken in MySQL Workbench

  2. Hoe u alle beperkingen van CHECK en externe sleutels in een database in SQL Server inschakelt (T-SQL-voorbeelden)

  3. Het kantelpunt visualiseren met Plan Explorer

  4. Database die>500 miljoen rijen aankan