我有一个数字列表,保存在名为 A 的表中。我想在另一个名为 K 的表中搜索这些数字。在这个名为 K 的表中,我尝试搜索名为 PAR 的列,并且该列包含值像 A 以及其他包含字符和数字的值。
例如; 我的表A有一个号码:12312312312 表 K 列 PAR 有类似#NUM=12312312312#NA=45453#085937.....
表A包含20k数据。我正在尝试查找表 K 列 PAR 是否包含那 20k 值。我怎样才能做到这一点?
我使用 TOAD 和 ORACLE SQL。我没有使用 PL/SQL 的权限。谢谢!
这里有一个选项,它将
par
拆分为行(仅包含数值),并将子查询结果与 a
表的 num
列(应用了 to_char
函数,以避免隐式数据类型转换和假阳性结果)。
样本数据:
SQL> WITH
2 a (num)
3 AS
4 (SELECT 12312312312 FROM DUAL
5 UNION ALL
6 SELECT 1231 FROM DUAL
7 UNION ALL
8 SELECT 85937 FROM DUAL),
9 k (par)
10 AS
11 (SELECT '#NUM=12312312312#NA=45453#085937' FROM DUAL
12 UNION ALL
13 SELECT '#XY=12319' FROM DUAL
14 UNION ALL
15 SELECT '#FM=1185937#NUM=1231#12310' FROM DUAL)
查询:
16 SELECT x.par, a.num
17 FROM a
18 JOIN (
19 SELECT PAR, REGEXP_SUBSTR (par,
20 '\d+',
21 1,
22 COLUMN_VALUE) kpar
23 FROM k
24 CROSS JOIN
25 TABLE (
26 CAST (
27 MULTISET ( SELECT LEVEL
28 FROM DUAL
29 CONNECT BY LEVEL <= REGEXP_COUNT (par, '=') + 1)
30 AS SYS.odcinumberlist))
31 ) x
32 ON TO_CHAR (a.num) = x.kpar;
PAR NUM
-------------------------------- ----------------
#NUM=12312312312#NA=45453#085937 12312312312
#FM=1185937#NUM=1231#12310 1231
SQL>
附注你说
我没有使用 PL/SQL 的权限
没有这样的补助金。您可能无权创建 PL/SQL 命名程序单元(函数、过程、触发器、包),但您当然可以创建匿名 PL/SQL 块。