執行代碼:https ://dbfiddle.uk/?rdbms=oracle_21&fiddle=69131953cf61459b64092025737d79b7
我有一個有幾個欄位的物件。我想說一個欄位只能有某些值。
我試著用和桌子一樣的方法來做
create type oa as object(
a VARCHAR2(59) constraint cta check(a in ('a1','a2' ))
)
ORA-24344: 編譯錯誤成功
我試圖創建一個表并說我的物件具有相同的欄位
CREATE TABLE ta(
a VARCHAR2(59) constraint cta check(a in ('a1','a2' ))
)
Create type oa2 as ta%rowtype
ORA-24344: 編譯錯誤成功
它也不起作用。
uj5u.com熱心網友回復:
你不能; 約束只能應用于表或視圖。
從constraint檔案中:
約束子句可以出現在以下陳述句中:
CREATE TABLE(見CREATE TABLE)ALTER TABLE(見ALTER TABLE)CREATE VIEW(見CREATE VIEW)ALTER VIEW(見ALTER VIEW)
作為替代方案,您可以將型別宣告為:
CREATE TYPE oa as object(
a VARCHAR2(59)
);
然后宣告一個帶有附加CHECK約束的物件派生表:
CREATE TABLE oat OF oa (
CONSTRAINT oat_chk CHECK (a in ('a1', 'a2'))
);
然后:
INSERT INTO oat VALUES (oa('a1'));
INSERT INTO oat (a) VALUES ('a1');
有效,但:
INSERT INTO oat VALUES (oa('b1'));
INSERT INTO oat (a) VALUES ('b1');
違反檢查約束。
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457514.html
下一篇:找到符號“CREATE”而不是
