You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中实现Oracle表wildcards值与传入参数的反向匹配?

从Oracle表中反向匹配传入参数的子串值

核心SQL实现

要找出wildcards表中wildcard列值是传入参数子串的记录,可使用Oracle的INSTR函数判断子串存在性,SQL语句如下:

SELECT wildcard
FROM wildcards
WHERE INSTR(:input_param, TRIM(wildcard)) > 0;

说明

  • INSTR(目标字符串, 子串):返回子串在目标字符串中的起始位置,返回值>0则表示子串存在。这里把传入参数作为目标字符串,表中wildcard值作为子串,实现反向匹配。
  • TRIM(wildcard):处理wildcard列可能存在的前后空格,避免因空格导致匹配失败(比如示例中job_ftp 的尾部空格)。
  • 由于表数据动态更新,每次执行该SQL都会查询最新的表记录,满足运行时新增数据的匹配需求。

Bash脚本中集成调用

假设脚本接收的参数为$1,可通过sqlplus执行上述SQL,示例代码如下:

#!/bin/bash
# 处理传入参数的单引号转义,避免SQL语法错误
ESCAPED_PARAM=$(echo "$1" | sed "s/'/''/g")

# 用sqlplus连接Oracle并执行查询
sqlplus -s your_username/your_password@your_db_service <<EOF
SET HEAD OFF
SET FEEDBACK OFF
VAR input_param VARCHAR2(255);
EXEC :input_param := '$ESCAPED_PARAM';
SELECT wildcard
FROM wildcards
WHERE INSTR(:input_param, TRIM(wildcard)) > 0;
EXIT;
EOF

说明

  • -s参数让sqlplus以静默模式运行,避免输出多余的连接信息。
  • SET HEAD OFF和SET FEEDBACK OFF关闭表头和执行结果统计,只输出匹配到的wildcard值。
  • 单引号转义处理:通过sed把参数中的单引号替换为两个单引号,符合Oracle字符串的转义规则,同时避免SQL注入风险。

内容的提问来源于stack exchange,提问作者defekas17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:01:04