我有一张表机构表(机构id,管理人员身份证号,用户数量),其中身份证号并不是单个省份证号码、而是加了密的一个字符串,通过某个算法可以得到多个真正的身份证号码数组,我的目的是将多个身份证号码与用户表进行关联得到多个记录,比如机构表一条记录为(0100,ssfsx0sesd00xsdf,30),‘ssfsx0sesd00xsdf’可以导出多个身份证号aaaa、bbb、ccc,则我想要的数据集合是
0100,aaa,30,
0100,bbb,30
0100,ccc,30
请问如何用sql语句表达出来?算法可以封装成函数.但必须用一个查询表达出来。
0100,aaa,30,
0100,bbb,30
0100,ccc,30
请问如何用sql语句表达出来?算法可以封装成函数.但必须用一个查询表达出来。
一条sql语句是不行的,要达到效果就要用函数或存储过程,然后返回复合类型集合。
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
SQL> create or replace type arr is table of varchar2(100);
2 /
Type created
SQL>
SQL> create or replace function f
2 (
3 p_str in varchar2
4 )
5 return arr
6 is
7 v_x arr;
8 begin
9 v_x := arr();
10 v_x.extend();
11 v_x(1) := '1234';
12
13 if (to_number(p_str) > 5) then
14
15 v_x.extend();
16 v_x(2) := '8910';
17
18 end if;
19
20 return v_x;
21 --....
22 end;
23 /
Function created
SQL>
SQL> with t as (
2 select to_char(rownum) str
3 from dual
4 connect by rownum <= 10
5 )
6 select t.str, column_value
7 from t, table(cast(f(t.str) as arr)) x
8 /
STR COLUMN_VALUE
---------------------------------------- --------------------------------------------------------------------------------
1 1234
2 1234
3 1234
4 1234
5 1234
6 1234
6 8910
7 1234
7 8910
8 1234
8 8910
9 1234
9 8910
10 1234
10 8910
15 rows selected
from t, table(cast(f(t.str) as arr)) x;我原以为是执行不过的,结果经测试,居然成功