【发布时间】:2016-01-19 23:40:13
【问题描述】:
这是我在 Oracle 中的存储过程:
CREATE OR REPLACE PROCEDURE execute_cproc ( callnum IN VARCHAR2
, RESULT OUT VARCHAR2)
AS
vara_val NUMBER;
varb_val NUMBER;
BEGIN
SELECT a_val, b_val
INTO vara_val, varb_val
FROM data_table
WHERE callnum LIKE numberpattern || '%';
END;
如果 CALLNUM 是 03354123 那么我得到 2 个结果:
03354123 like 033%03354123 like 03354%
两者都是正确的,所以我得到 2 个结果。
如何让程序只找到最长的匹配,即03354123 like 03354%?
表:
表名:DATA_TABLE
列:
NumberPattern (varchar2) : 033, 03354
a_val ( integer ) : 1, 2
b_val ( integer ) : 1, 2
【问题讨论】:
-
请帮忙。如果问题不清楚或有任何疑问,请告诉我
-
什么是'NumberPattern'? 'CALLNUM' 是参数还是来自 'DATA_TABLE' 的列?
-
问题中添加的表格。 NumberPattern 是表中的列名,过程中输入了 CALLNUM。
-
在oracle中没有太多的exp,但是你可以像这样使用row_number()..select a_val, vara_val,varb_val from (select a_val, b_val into vara_val, varb_val from DATA_TABLE where CALLNUM LIKE NumberPattern || '%') Z 限定 row_number over (partition by varb_val order by varb_val desc)=1;
-
@anwaar_hell :我希望最大匹配模式应该返回。示例 03354123 喜欢 03354%,而 03354123 喜欢 033%。因为 03354% 更匹配 03354123 而不是 033%。
标签: sql oracle stored-procedures top-n