如何在pl / sql中搜索字符串

时间:2014-01-16 10:37:13

标签: oracle plsql substring

我需要搜索邮件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;

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

2 个答案:

答案 0 :(得分:3)

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。

答案 1 :(得分:1)

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
------------------------------------------------