sql >> Databáze >  >> RDS >> Oracle

Jak vytvořit sloupec, který není null v pohledu

Do pohledu nelze přidat podmínku not null nebo check; viz toto a na stejné stránce „Omezení omezení NOT NULL“ a „Omezení kontrolních omezení“. Můžete přidat with check option (proti nadbytečné klauzuli where) do zobrazení, ale to nebude označeno jako not null v datovém slovníku.

Jediný způsob, jak dosáhnout tohoto efektu, je, pokud jste na 11g, přidat hodnotu cast jako virtuální sloupec do tabulky a (pokud je to stále potřeba) vytvořit pohled proti tomu:

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

Vzhledem k tomu, že jste v komentáři na dba.se řekli, že jde o zesměšňování něčeho, můžete k simulaci virtuálního sloupce použít normální sloupec a spouštěč:

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

A desc "MyView" stále dává:

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

Jak zmínil Leigh (také na dba.se), pokud byste chtěli vložit/aktualizovat pohled, můžete použít instead of spouště, s VC nebo falešnou verzí.



  1. SQL LIKE operátor pro začátečníky

  2. MySQL Jako více hodnot

  3. Zaujměte lidský přístup ke správě dat

  4. Jak mohou správci nemovitostí zlepšit efektivitu s databází