我想在 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,空,空,空)