【问题标题】:stored procedure pattern match存储过程模式匹配
【发布时间】:2015-10-20 19:03:49
【问题描述】:

我有一个表名为DATA_TABLE

我的存储过程:

create or replace

PROCEDURE EXECUTE_CPROC    
( 
  CALLNUM IN VARCHAR2, 
  RESULT OUT VARCHAR2
)
AS    
vara_val NUMBER(1) ;    
varb_val NUMBER(1) ;   
BEGIN

     select a_val,b_val into vara_val, varb_val 
     from DATA_TABLE 
     where NumberPattern  like CALLNUM ||'%' ;

END 

============

  • 现在如果 CALLNUM 是 0335412 那么在 DATA_TABLE 表中 NumberPattern 03354 应该匹配。

  • 如果CALLNUM 是033111,那么在DATA_TABLE 表中NumberPattern 033 应该匹配。

所以需要修改SP写的查询。

============

表名:DATA_TABLE

列:

  1. NumberPattern (varchar2) : 033, 03354

  2. a_val(整数):1, 2

  3. b_val(整数):1, 2

【问题讨论】:

  • 如果您有任何疑问,请告诉我
  • 我在您的查询中没有看到表DATA_TABLE?表 DATA_TABLE 如何适合存储过程以及它与其他表 cdiv_service_activationvara_valvarb_val 的关系如何?
  • 但是 '03354' LIKE '0335412%' 是假的;它应该是 '0335412' LIKE '03354%' 代替。因此:where CALLNUM like NumberPattern || '%' 。除此之外,我不明白这个问题。有RESULT,您不填写,还有vara_valvarb_val,您填写但不返回。那么你的问题到底是什么?
  • @Mahmoud Gamal:抱歉,这是一个复制粘贴错误。现在已编辑查询。
  • @Thorsten Kettner :我在这方面面临一个问题。在我的电话号码中,CALLNUM 是 03354123,然后我得到 2 个结果。 1) 03354123 喜欢 033% 2) 03354123 喜欢 03354%。两者都是正确的,因此得到 2 个结果。我希望只有 03354123 像 03354% 应该返回。我的意思是最大匹配模式。你能帮忙吗

标签: sql oracle stored-procedures


【解决方案1】:

您的查询应该是

 select a_val, b_val
   into vara_val, varb_val 
   from DATA_TABLE 
   where CALLNUM LIKE NumberPattern || '%';

您在查询中颠倒了 CALLNUMNumberPattern

祝你好运。

【讨论】:

  • 是的,我认为这样写是不正确的: where CALLNUM LIKE NumberPattern || '%'; .我的理解是在它应该是列名之后。
  • 我在这方面面临一个问题。在我的电话号码中,CALLNUM 是 03354123,然后我得到 2 个结果。 1) 03354123 喜欢 033% 2) 03354123 喜欢 03354%。两者都是正确的,因此得到 2 个结果。我希望只有 03354123 像 03354% 应该返回。我的意思是最大匹配模式。你能帮忙吗?
猜你喜欢
  • 2016-01-19
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
相关资源
最近更新 更多