如果可以进行全表扫描则可以这样
用两个字段处理
type number(10); -- 存储共有几个点
test varchar2(200); -- 存储坐标
如果是16个点则为
test:='a1^a2^a3^a4^a5^a6^a7^a8^a9^a10^a11^a12^a13^a14^a15^a16'
然后写存储函数处理
例如判断其中是否存在一个点如下
create or replace function checkSubstring
(ACheckString in varchar2,ASubstring in varchar2,ADivChar char)return number is
tmpString varchar2(50);
tmpStr varchar2(50);
-- 创建时间: 2002-05-09 最后修改时间: 2002-05-09
-- 创建人: XG_DELAYTH 最后修改人: XG_DELAYTH
-- 功能:判断输入的字符数组中是否存在相应的子串
-- 参数:
-- ACheckString: 输入的字符串
-- ASubstring: 要判断的子字符串
-- ADivChar: 分割符号
-- 返回:成功返回0,否则返回-1
-- 举例:
-- ACheckString:'^1^2^3^4^67^23',ASubstring:'6',ADivChar:'^' 返回-1
-- ACheckString:'1^2^3^4^67^23',ASubstring:'67',ADivChar:'^' 返回0
-- 实现思想:循环的一份份取出ACheckString中的值,逐个进行比较,处理前后的分割符号
begin
tmpString:=ACheckString;
if (ACheckString is null) or (ASubstring is null) or (ADivChar is null) then
return -1;
end if;
loop
if tmpString is null then
return -1;
end if;
if substr(tmpString,1,1)=ADivChar then
if length(tmpString)<=1 then
return -1;
else
tmpString:=substr(tmpString,2,length(tmpString));
end if;
end if;
if instr(tmpString,ADivChar)<=0 then
tmpStr:=tmpString;
tmpString:=null;
else
tmpStr:=substr(tmpString,1,instr(tmpString,ADivChar)-1);
end if;
if tmpStr=ASubstring then
return 0;
end if;
tmpString:=substr(tmpString,instr(tmpString,ADivChar)+1,length(tmpString));
end loop;
end;