Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

एक दृश्य में एक अशक्त स्तंभ कैसे बनाएं?

आप किसी दृश्य में एक शून्य नहीं जोड़ सकते हैं या बाधा की जांच नहीं कर सकते हैं; इसे और उसी पृष्ठ पर देखें 'पूर्ण बाधाओं पर प्रतिबंध' और 'चेक बाधाओं पर प्रतिबंध'। आप with check option जोड़ सकते हैं (एक अनावश्यक जहां खंड के खिलाफ) देखने के लिए लेकिन इसे not null के रूप में चिह्नित नहीं किया जाएगा डेटा डिक्शनरी में।

इस प्रभाव को प्राप्त करने का एकमात्र तरीका मैं सोच सकता हूं, यदि आप 11g पर हैं, तो टेबल पर वर्चुअल कॉलम के रूप में कास्ट वैल्यू जोड़ने के लिए, और (यदि इसकी अभी भी आवश्यकता है) उसके खिलाफ दृश्य बनाएं:

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

चूंकि आपने dba.se पर एक टिप्पणी में कहा था कि यह कुछ मज़ाक करने के लिए है, आप वर्चुअल कॉलम को अनुकरण करने के लिए एक सामान्य कॉलम और ट्रिगर का उपयोग कर सकते हैं:

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" अभी भी देता है:

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

जैसा कि लेह ने उल्लेख किया है (dba.se पर भी), यदि आप उस दृश्य को सम्मिलित/अपडेट करना चाहते हैं तो आप instead of का उपयोग कर सकते हैं ट्रिगर, वीसी या नकली संस्करण के साथ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. व्याख्या योजना और निष्पादन योजना के बीच अंतर

  2. शून्य मानों वाले कॉलम अपडेट करें

  3. Oracle पंक्ति के एकाधिक स्तंभों पर धुरी का उपयोग करना

  4. ORA-01034:ORACLE उपलब्ध नहीं है ORA-27101:साझा स्मृति क्षेत्र मौजूद नहीं है

  5. संग्रहीत प्रक्रिया में पैरामीटर के रूप में तालिका नाम कैसे पास करें?