Oracle ORDS是否支持NOT LIKE查询?400错误请求如何解决?
Oracle ORDS NOT LIKE 查询问题解决方案
核心结论
Oracle ORDS不支持直接使用$not like或$notlike这类运算符,这是你收到400错误请求的原因。ORDS的q参数查询语法遵循特定规则,仅支持有限的预定义运算符组合。
可行替代方案
1. 使用$not嵌套$like的标准语法
ORDS支持通过$not运算符否定单个条件,正确的NOT LIKE逻辑需要将$like嵌套在$not对象中:
- 未编码格式:
https://my.api.com/v1/results?q={"type":{"$not":{"$like":"FP%"}}} - URL编码格式:
https://my.api.com/v1/results?q=%7B%22type%22%3A%7B%22%24not%22%3A%7B%22%24like%22%3A%22FP%25%22%7D%7D%7D
2. 自定义SQL端点
如果是你自行创建的ORDS端点,直接在资源定义中编写包含NOT LIKE的SQL语句,例如:
SELECT * FROM your_target_table WHERE type NOT LIKE :pattern
调用时通过参数传递匹配模式:
https://my.api.com/v1/results?pattern=FP%
3. 添加自定义过滤器(针对自动生成的REST服务)
如果是ORDS自动为数据库表生成的REST服务,可以通过添加PL/SQL过滤器实现NOT LIKE逻辑:
- 进入ORDS的REST服务管理界面,找到目标表的REST服务
- 添加一个前置或后置过滤器,编写PL/SQL代码过滤数据,示例:
DECLARE v_pattern VARCHAR2(100) := owa_util.get_cgi_env('QUERY_STRING'); BEGIN IF v_pattern IS NOT NULL THEN ords.define_filter( p_module_name => 'your_module', p_pattern => '/results', p_filter_type => 'REQUEST', p_filter => 'type NOT LIKE ''' || v_pattern || '''' ); END IF; END;
内容的提问来源于stack exchange,提问作者Harry Birimirski
相关产品推荐
相关产品推荐

