我想在 Oracle 对象类型中设置默认值,但它要求所有属性都需要在构造函数中传递。
无论如何,这样我就可以在需要默认值的构造函数中传递必需的属性。
请查看以下详细信息
SQL> 创建类型 TYPE_SUB 作为对象( 2 列 1 号, 3 COL2 VARCHAR2(100) 4) 5 不是最终的 6 / 创建的类型。 SQL> 创建或替换类型 TYPE_MAIN 2 在 TYPE_SUB 下 3 ( 4 COL3 varchar2(10), 5 COL4 VARCHAR2(10), 6 CONSTRUCTOR FUNCTION TYPE_MAIN(COL1 NUMBER,COL2 VARCHAR2,COL3 varchar2,COL4 VARCHAR2)返回自我作为结果) 7 不是最终的 8 / 创建的类型。 SQL> 创建或替换类型主体 TYPE_MAIN 是 2 CONSTRUCTOR FUNCTION TYPE_MAIN (COL1 NUMBER, COL2 VARCHAR2, COL3 varchar2, COL4 VARCHAR2) 按结果返回自我 3 开始 4 SELF.COL1 := nvl(COL1,123); 5 SELF.COL2 := nvl(COL2,'NA'); 6 SELF.COL3 := nvl(COL3,'NA'); 7 SELF.COL4 := nvl(COL4,NULL); 8 返回; 9 结束; 10 结束; 11 / 创建的类型主体。 SQL> 创建表 TAB_MAIN ( 2 个密钥号码, 3 COLTEST VARCHAR2(100), 4 COLNEW TYPE_MAIN) 5 / 表已创建。 SQL> 插入 TAB_MAIN(PKEY) 值(1) 2 / 创建了 1 行。 SQL> INSERT INTO TAB_MAIN(PKEY,COLTEST,COLNEW) 值(1,'TESTCOL',TYPE_MAIN('1','2',NULL,NULL)) 2 / 创建了 1 行。 SQL> INSERT INTO TAB_MAIN(PKEY,COLTEST,COLNEW) 值(1,'TESTCOL2',TYPE_MAIN('1',NULL,NULL,NULL)) 2 / 创建了 1 行。 SQL> SELECT * FROM TAB_MAIN 2 / PKEY COLEST COLNEW(COL1、COL2、COL3、COL4) ---------- ---------- ------------------ ---------- 1 1 TESTCOL TYPE_MAIN(1, '2', 'NA', NULL) 1 TESTCOL2 TYPE_MAIN(1, 'NA', 'NA', NULL)
现在,在上面的例子中,如果我只在构造函数中传递 Col3 和 Col4 属性作为默认值,那么它就不起作用了。请看下面的例子。
SQL> 创建类型 TYPE_SUB 作为对象( 2 列 1 号, 3 COL2 VARCHAR2(100) 4) 5 不是最终的 6 / 创建的类型。 SQL> 创建或替换类型 TYPE_MAIN 2 在 TYPE_SUB 下 3 ( 4 COL3 varchar2(10), 5 COL4 VARCHAR2(10), 6 CONSTRUCTOR FUNCTION TYPE_MAIN(COL3 varchar2, COL4 VARCHAR2) 作为结果返回自身) 7 不是最终的 8 / 创建的类型。 SQL> 创建或替换类型主体 TYPE_MAIN 是 2 CONSTRUCTOR FUNCTION TYPE_MAIN (COL3 varchar2, COL4 VARCHAR2) 按结果返回自我 3 开始 4 SELF.COL3 := nvl(COL3,'NA'); 5 SELF.COL4 := nvl(COL4,NULL); 6 返回; 7 结束; 8 结束; 9 / 创建的类型主体。 SQL> 创建表 TAB_MAIN ( 2 个密钥号码, 3 COLTEST VARCHAR2(100), 4 COLNEW TYPE_MAIN) 5 / 表已创建。 SQL> 插入 TAB_MAIN(PKEY) 值(1) 2 / 创建了 1 行。 SQL> INSERT INTO TAB_MAIN(PKEY,COLTEST,COLNEW) 值(1,'TESTCOL',TYPE_MAIN('1','2',NULL,NULL)) 2 / 创建了 1 行。 SQL> INSERT INTO TAB_MAIN(PKEY,COLTEST,COLNEW) 值(1,'TESTCOL2',TYPE_MAIN('1',NULL,NULL,NULL)) 2 / 创建了 1 行。 SQL> SELECT * FROM TAB_MAIN 2 / PKEY COLEST COLNEW(COL1、COL2、COL3、COL4) ---------- ---------- ------------------ ---------- 1 1 TESTCOL TYPE_MAIN(1, '2', NULL, NULL) 1 TESTCOL2 TYPE_MAIN(1,空,空,空)