【问题标题】:How to search for a string in pl/sql如何在pl/sql中搜索字符串
【发布时间】:2014-02-05 05:10:11
【问题描述】:

我需要在逗号分隔的ID组中搜索邮件ID是否可用。

我正在尝试使用以下代码。

对于不可用的 ID,它也会显示“可用”。

CREATE OR REPLACE PROCEDURE sample 
AS
  email_id VARCHAR2(1000);
  mail     VARCHAR2(100);    
  BEGIN
    email_id := 'robin@gmail.com, gilbert@rediff.com, osborn@yahoo.com, allwyn@gmail.com, chris@yahoo.com';
    mail := 'chris@gmail.com';

    IF (INSTR(email_id, mail) IS NOT NULL) THEN
      dbms_output.PUT_LINE('available');
    ELSE
      dbms_output.PUT_LINE('sorry');
    END IF;

  END sample;

它无法正常工作。请帮帮我。

【问题讨论】:

标签: oracle plsql substring


【解决方案1】:

INSTR() 将返回 0,如果它没有在源中找到匹配的子字符串(除非输入本身为 NULL)。所以当你检查NOT NULL时,它总是返回TRUE

如果找到匹配的子字符串,它将返回子字符串在源中的位置。(NUMBER)

所以对于您的情况,LIKEREGEXP_LIKE 应该会有所帮助。
您仍然可以选择以下内容。

if(INSTR (EMAIL_ID, MAIL) > 0)
then
  DBMS_OUTPUT.PUT_LINE('available');
else 
  DBMS_OUTPUT.PUT_LINE('sorry');
end if;

Documentation 来自 Oracle。

【讨论】:

  • @CDurai 很高兴它有效,如果它对您有帮助,您能接受答案吗? :)
  • @CDurai 这个答案总是比新接受的答案好!
【解决方案2】:
Hi i guess instead of declaring a full new variable and then using just use LIKE 
operator. I think it should resolve your query.
DECLARE
  lv_var VARCHAR2(100);
BEGIN
  lv_var:='avra14march@gmail.com,shubhojitr@yahoo.co.in';
  IF lv_var LIKE '%avra%' THEN
    dbms_output.put_line('Available');
  ELSE
    dbms_output.put_line('Sorry');
  END IF;
END;

OUTPUT 
------------------------------------------------
anonymous block completed
Available
------------------------------------------------

【讨论】:

  • 嗨。我很高兴它对你有所帮助。你能回答吗:)
猜你喜欢
  • 1970-01-01
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多