趣味SQL——创建指定的数据类型
在一篇文章上看到“提出过可以创建指定的数据类型”,于是想尝试着创建一下看看。
但是没有按预想的那样成功~~
?

create type MyName as object (first varchar2(20),second varchar2(20) );
?
create table newtype_test(
ID varchar2(32),
newname MyName
);
?
看一下创建的表结构:有两个列!

在查询数据看看效果:有三个列!
select * from newtype_test;
?

?
下面就是实验插入数据看看了,以命令行的方式插入,不成功,几次尝试如下:
SQL> insert into newtype_test(id,newname.first,newname.second) values(2,'shen','lan');
insert into newtype_test(id,newname.first,newname.second) values(2,'shen','lan')
ORA-00904: "NEWNAME"."SECOND":标识符无效
SQL> insert into newtype_test(id,newname.first,newname.second) values(2,shen,lan);
insert into newtype_test(id,newname.first,newname.second) values(2,shen,lan)
ORA-00984:列在此处不允许
SQL> insert into newtype_test(id,newname.first,newname.second) values(2,(shen),(lan));
insert into newtype_test(id,newname.first,newname.second) values(2,(shen),(lan))
ORA-00984:列在此处不允许
SQL> insert into newtype_test(id,newname) values(2,'shenlan');
insert into newtype_test(id,newname) values(2,'shenlan')
ORA-00932:数据类型不一致:应为 HYL.MYNAME,但却获得 CHAR
SQL> insert into newtype_test(id,newname) values(2,shenlan);
insert into newtype_test(id,newname) values(2,shenlan)
ORA-00984:列在此处不允许
SQL> insert into newtype_test(id,newname) values(2,(shen,lan));
insert into newtype_test(id,newname) values(2,(shen,lan))
ORA-00907:缺失右括号
SQL> insert into newtype_test(id,newname) values(2,(shen),(lan));
insert into newtype_test(id,newname) values(2,(shen),(lan))
ORA-00913:值过多
SQL> insert into newtype_test(id,newname) values(2,(shen));
insert into newtype_test(id,newname) values(2,(shen))
ORA-00984:列在此处不允许
SQL> insert into newtype_test(id,newname(first,second)) values(2,('shen','lan'));
insert into newtype_test(id,newname(first,second)) values(2,('shen','lan'))
ORA-00917:缺失逗号
SQL> insert into newtype_test(id,newname,(first,second)) values(2,('shen','lan'));
insert into newtype_test(id,newname,(first,second)) values(2,('shen','lan'))
ORA-01747: user.table.column, table.column或列说明无效
SQL> insert into newtype_test(id,newname.(first,second)) values(2,('shen','lan'));
insert into newtype_test(id,newname.(first,second)) values(2,('shen','lan'))
ORA-01747: user.table.column, table.column或列说明无效
SQL> insert into newtype_test.newname.first values('shen');
insert into newtype_test.newname.first values('shen')
ORA-00926:缺失 VALUES关键字
SQL> insert into newtype_test.newname values (shen);
insert into newtype_test.newname values (shen)
ORA-00942:表或视图不存在
SQL> insert into newtype_test.newname values (shen,lan);
insert into newtype_test.newname values (shen,lan)
ORA-00942:表或视图不存在
SQL> insert into newtype_test.newname(first,second) values(shen,lan);
insert into newtype_test.newname(first,second) values(shen,lan)
ORA-00942:表或视图不存在
SQL> insert into newtype_test(hyl.tname.first,hyl.tname.second) values(1,2);
insert into newtype_test(hyl.tname.first,hyl.tname.second) values(1,2)
ORA-00904: "HYL"."TNAME"."SECOND":标识符无效
尝试了半天,也没弄明白,怎么插入,于是尝试了一下用工具插入数据:
select * from newtype_test for update;
?

竟然成功插入了,查询有值,如下:
?

于是,尝试用工具逆向导出插入语句来看一看,如下:

粘贴后,如下所示:
prompt Importing table newtype_test...
set feedback off
set define off
insertinto newtype_test (ID, NEWNAME.FIRST, NEWNAME.S