Oracle中作为永久存储机制的嵌套表的数据追加
来源:互联网 发布:ubuntu 16.04 dash 编辑:程序博客网 时间:2024/06/06 20:01
头几天有人问了一个问题:
--创建类型minutiae
create OR REPLACE type minutiae_t as object(x number(3,0),y number(3,0),t varchar2(10),theta number(6,2));
/
--创建类型minutiaeset
create OR REPLACE type minutiaeset_t as table of minutiae_t;
/
--创建表tb_f
create table tb_f(fingerId NVARCHAR2(50),minutiaeSet minutiaeset_t)
nested table minutiaeSet store as minutiaeSettab;
/
--创建过程,向表中插入数据
create or replace procedure insert_into_minutiaeset_t
as
mydata minutiaeset_t;
begin
mydata:=minutiaeset_t(minutiae_t(1,3,'end',2.1));
insert into tb_f values('102.bmp',mydata);
end;
/
--更新嵌套表数据
declare
mydata minutiaeset_t;
begin
mydata:=minutiaeset_t(minutiae_t(1,3,'end',2.1));
update tb_f set minutiaeSet=mydata where fingerId='102.bmp';
end;
/
问题是如何根据查询条件在嵌套表中追加数据?例如,想要在fingerId='102.bmp'的一行中,追加特征点数据。
--------------------------
以我的能力可以给出两种解决方法:
--方法1:
select * from table(select minutiaeset from tb_f where fingerid='102.bmp');
X Y T THETA
---- ---- ---------- --------
1 3 end 2.10
insert into table(select minutiaeset from tb_f where fingerid='102.bmp') values(minutiae_t(5,7,'start',3));
1 row inserted
select * from table(select minutiaeset from tb_f where fingerid='102.bmp');
X Y T THETA
---- ---- ---------- --------
1 3 end 2.10
5 7 start 3.00
--方法2:
CREATE OR REPLACE PROCEDURE proc_append_minutiaeset_t(newvalue minutiae_t,search_value VARCHAR2)
AS
temp_nested_table minutiaeset_t:=minutiaeset_t();
BEGIN
SELECT minutiaeset INTO temp_nested_table FROM tb_f WHERE fingerid=search_value;
temp_nested_table.extend;
temp_nested_table(temp_nested_table.count):=newvalue;
update tb_f set minutiaeSet=temp_nested_table where fingerId=search_value;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Exception!');
END;
/
exec proc_append_minutiaeset_t(minutiae_t(2,2,'mid',2),'102.bmp')
SQL> select * from table(select minutiaeset from tb_f where fingerid='102.bmp');
X Y T THETA
---- ---- ---------- --------
1 3 end 2.10
5 7 start 3.00
2 2 mid 2.00
不过,用嵌套表作为数据的永久存储机制好像并不能得到什么好处。我认为是这样。
- Oracle中作为永久存储机制的嵌套表的数据追加
- <Oracle基本的数据存储机制-表>
- Android SharedPreferences 永久存储简单的数据
- localStorage----客户端永久存储数据的方法
- Oracle存储过程中多层嵌套游标的用法
- oracle中存储 过程嵌套游标的使用
- cocos2d数据的文件存储并追加到文件末尾
- php对图书的增删改查操作(xml作为数据存储机制)
- json数据的追加
- .Net Micro Framework研究—数据的永久存储
- Java获取Oracle存储过程返回的自定义嵌套表
- 安装cassandra作为kairosdb的数据存储
- 嵌套表+语法+嵌套表作为表列的数据类型
- oracle复制表tabel1,修改某个字段后将修改后的数据追加到tabel1
- Swift数据永久存储
- (小笔记)()Oracle 批量复制一个数据表的数据,修改部分字段后追加加入到数据表中
- Asp中使用Xml作为数据存储方式的新闻发布
- java 向已存在的excel中追加数据
- 如何判别主板BIOS启动时的提示?
- 火狐不执行js的一些解决办法及火狐对js的兼容问题
- var 中的变量 必须声明:
- java如何获取键盘输入
- 一位老板的招聘感想
- Oracle中作为永久存储机制的嵌套表的数据追加
- 有一种关心,不只是感动 !
- 又过了一个星期
- printf 的打印格式
- u-boot :一个编译 hello_world.srec 的错误
- Java Scanner NoSuchElementException
- Ramdisk制作
- [原创](2010.02.07更新)忙里偷闲中写的一个系统物理/虚拟内存查看器。
- 通过GC输出分析内存泄露问题