regexp_like expression not working with variable

16 浏览
0 Comments

regexp_like expression not working with variable

记录在错误字段中没有任何内容。被注释掉的代码没有返回任何东西,但当变量被使用时,它返回一条记录。我做错了什么?

0
0 Comments

问题的原因是regexp_like表达式不能与变量一起使用。解决方法是将正则表达式的元字符与变量隔离开来,通过连接两个部分来完成要求。使用'i'选项可以忽略大小写敏感性。将以下代码放入查询中尝试解决问题:

   test varchar(5);
   test := '1';
 select  * from timedetail 
  where empnum = '013061361' 
    and tsdate = '1-nov-13' 
    and  regexp_like(errors, test,'i'); --matches any string containing 1
--and  regexp_like(errors,'^' ||  test,'i') --matches any string beginning 1
--and  regexp_like(errors, test || '$','i') --matches any string ending 1
--and  regexp_like(errors, '^' || test || '$','i') --matches any string exactly 1

0
0 Comments

regexp_like表达式与变量一起使用时不起作用的原因是因为变量被当作字符串处理。正确的语法应该是'[' || test || ']'。当尝试运行时,会出现“Test invalid identifier”的错误。这是由于在SQL中使用参数的方式因工具而异。在Oracle SQL Developer中,可以使用以下语法:stackoverflow.com/questions/5653423/…。而在SQL*Plus中,可以使用以下语法:docs.oracle.com/cd/B19306_01/server.102/b14357/ch5.htm

使用Oracle作为DBMS,它是一个引擎。问题在于如何访问它?两个标准工具是SQL*Plus和Oracle SQL Developer。但还有其他工具,如TOAD、PL/SQL Developer等。SQL中的参数不是标准的一部分,所以每个人都可以自由实现它们。

如果这部分代码是在Python、C#或其他语言中,那么你将使用特定于驱动程序的绑定变量。

无论我使用什么前端,查询应该都能正常工作。

问题出在regexp_like的第二个参数中,其中使用了test。

我正在使用SQL Developer。

为了解决这个问题,我会使用Oracle SQL Developer的语法(因为在各种工具中更常见)。但这不是一个通用的解决方案。

我们可以在聊天中继续讨论

0