有一张idd表 有2个字段 DZXZ 存储地址 AIDEDIDD 存储地址编码现在表中DZXZ 字段值都存在 现在需要实现的是
根据dzxz字段的地址 生成 在AIDEDIDD字段中生成地址代码
地址有以下四种情况
一:石门一路
二:石门一路336弄
三:石门一路114号
四:石门一路336弄17号其中有D_LM字典表 根据***路可以在字典表中查出相应的代码(6位)
假如查出“石门一路”的代码为“000001”
以上四种情况分别生成的AIDEDIDD为:
一:00000100000000 只有**路的取出路的代码+0000+0000(要保证弄和号的代码为4位数)
二:00000103360000 有路和弄的 取出路的代码 + 弄号+号的代码(要保证弄和号的代码为4位数 不足4位 在前面补0)
三:00000100000114 有路和号的 取出路的代码 + 弄号+号的代码(要保证弄和号的代码为4位数 不足4位 在前面补0)
四:00000103360017 有路,弄和号的 取出路的代码 + 弄号+号的代码(要保证弄和号的代码为4位数 不足4位 在前面补0)
求一个存储过程 小弟谢过啦
根据dzxz字段的地址 生成 在AIDEDIDD字段中生成地址代码
地址有以下四种情况
一:石门一路
二:石门一路336弄
三:石门一路114号
四:石门一路336弄17号其中有D_LM字典表 根据***路可以在字典表中查出相应的代码(6位)
假如查出“石门一路”的代码为“000001”
以上四种情况分别生成的AIDEDIDD为:
一:00000100000000 只有**路的取出路的代码+0000+0000(要保证弄和号的代码为4位数)
二:00000103360000 有路和弄的 取出路的代码 + 弄号+号的代码(要保证弄和号的代码为4位数 不足4位 在前面补0)
三:00000100000114 有路和号的 取出路的代码 + 弄号+号的代码(要保证弄和号的代码为4位数 不足4位 在前面补0)
四:00000103360017 有路,弄和号的 取出路的代码 + 弄号+号的代码(要保证弄和号的代码为4位数 不足4位 在前面补0)
求一个存储过程 小弟谢过啦
可以有省,市,路,弄,号等字段,
界面地址输入的时候也让分别输,这样就比较好取了。
否则没法取的
IS
strtmpaddr varchar2(100) ;
strjie varchar2(20) := '' ;
strlong varchar2(20) := '' ;
strhao varchar2(20) := '' ;
strjiecode varchar2(6) := '000000' ;
strlongcode varchar2(4) := '0000' ;
strhaocode varchar2(4) := '0000' ;
intnum int;
BEGIN
intnum := instr(straddr,'路');
IF intnum = 0
THEN
RETURN strjiecode || strlongcode || strhaocode ;
END IF; strjie := substr(straddr,1,intnum);
strtmpaddr := substr(straddr,intnum+1,length(straddr));
BEGIN
SELECT lpad(AIDEDIDD,6,'0') INTO strjiecode FROM IDD WHERE dzxz = strjie ;
EXCEPTION
WHEN NO_DATA_FOUND THEN
strjiecode := '000000' ;
END; intnum := instr(strtmpaddr,'弄');
IF intnum > 0
THEN
strlongcode := lpad( substr(strtmpaddr,1,intnum-1),4,'0');
strtmpaddr := substr(strtmpaddr,intnum+1,length(strtmpaddr));
ELSE
strlongcode := '0000' ;
END IF; intnum := instr(strtmpaddr,'号');
IF intnum > 0
THEN
strhaocode := lpad(substr(strtmpaddr,1,intnum-1),4,'0');
END IF; RETURN strjiecode || strlongcode || strhaocode ;END codebyaddr ;测试结果:1. select codebyaddr('石门一路') from dual;
CODEBYADDR('石门一路')
-------------------------------
000001000000002. select codebyaddr('石门一路315弄') from dual;CODEBYADDR('石门一路315弄')
-------------------------------
000001031500003. select codebyaddr('石门一路114号') from dual;
CODEBYADDR('石门一路114号')
-------------------------------
000001000001144. select codebyaddr('石1门一路123弄456号') from dual;
CODEBYADDR('石1门一路123弄456号')
-------------------------------
00000001230456