Also statt Kommentar ich hinzufügen vollständige Antwort wegen Missverständnissen
DDL
CREATE TYPE MyType AS OBJECT (
some_property NUMBER(20),
CONSTRUCTOR FUNCTION MyType(some_property number default 123) RETURN SELF AS RESULT
) NOT FINAL;
/
CREATE OR REPLACE TYPE BODY MyType AS
CONSTRUCTOR FUNCTION MyType(some_property number default 123)
RETURN SELF AS RESULT
AS
BEGIN
SELF.some_property := some_property;
RETURN;
END;
END;
/
CREATE TABLE MyTable OF MyType;
DML Werke wie dieses
-- Insert row with 123
INSERT INTO MyTable(some_property)
VALUES(MyType().some_property);
/
-- Insert row with 456
INSERT INTO MyTable(some_property)
VALUES(MyType(456).some_property);
/
Meiner Meinung nach Konstruktor ist flexibler, wenn Tabelle mit Spaltenobjekt erstellen
create table testt (
v mytype);
/
insert into testt values(MyType());
/
insert into testt values(MyType(456));
/
aktualisieren
ich glaube, Sie smt wie diese insert into <table> values()
mit Objekttypen mit Konstrukteuren schreiben cann't. Sehen Sie sich auch die Problemumgehung mit dem Trigger Oracle: specifying default value for object type column an. Aber es ist nicht zuverlässig.
Noch eine Anmerkung
Recent Ich weiß, eine Sache, die Sie Standardwert verschachtelte Tabellenspalte hinzufügen können, wie es gewöhnlichen Tisch. Ich dachte, das ist verboten.
Schauen Sie sich das
CREATE TYPE MyType AS OBJECT (
some_property NUMBER(20),
test_property NUMBER(20)
);
CREATE TABLE MyTable OF MyType
(some_property default '123'); -- this simply transforms into 'alter table MYTABLE modify some_property default '123';'
insert into MyTable(test_property) values(1)
Sie Standardkonstruktors erstellen können. Siehe diesen Link http://stackoverflow.com/questions/17939882/setting-default-value-in-oracle-object-type-constructor-function. –
Ist es möglich, die vorhandene Syntax zum Einfügen von Objekten zu verwenden, z. 'Einfügen in MyTable (some_property) values (1)' und auch 'in MyTable values ()' einfügen? – tobspr