DB2 参数通配符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DB2 参数通配符相关的知识,希望对你有一定的参考价值。

在DB2存储过程中 怎样模糊查询 含% _ 的参数 比如
DECLARE S;
SELECT * FROM TABLE WHERE NAME LIKE '%S%'

S是传入的参数 ,无法预知其中的% 和_ 的个数

参考技术A 这个需要使用动态游标来执行

1.定义一个动态游标
declare cursor c1 from s1;

2.用一个varchar存放动态sql语句
declare v_stmt varchar(8000);

3.指定你需要的查询语句
set v_stmt='SELECT * FROM TABLE WHERE NAME LIKE ''%'||S||'%''';
语句可以随意拼接但需要符合语法
其中多个单引号这种形式中的第一个单引号为转义符,需要注意

4.准备sql语句
prepare s1 from v_stmt;

5.打开游标
open c1;

6.游标遍历
。。。

7.关闭游标
close c1;本回答被提问者采纳

通配符静默重定向到获取参数

【中文标题】通配符静默重定向到获取参数【英文标题】:Wildcard silent redirect to a get param 【发布时间】:2020-09-03 03:41:58 【问题描述】:

所以我试图让每个用户都有一个我的网站有一个子域

每当用户连接到通配符子域时,它都会将用户带到domain.com/send.php?username='subdomain',但我想隐藏重定向,因为它为用户显示subdomain.domain.com

我在 Apache Virtual Host 上直接修改,这里是我的条件

RewriteEngine 上 RewriteCond %SERVER_NAME =domain.com RewriteRule ^ https://%SERVER_NAME%REQUEST_URI [END,NE,R=permanent] RewriteCond %HTTP_HOST !^(www)。 [NC] RewriteCond %HTTP_HOST ^(.).(.).com [NC] RewriteRule (.) https://www.%2.com/send.php?username=%1 [NC,L] RewriteCond %HTTP_HOST ^(.)$ [NC] 重写规则 ^https://%1%REQUEST_URI [L,NE,R=301]

如果我使用 [P] 标志,我会收到 403 错误,如果我使用 L 标志,即使没有 R,它也会显示重定向的 URL。

我正在努力解决问题,谢谢!

【问题讨论】:

【参考方案1】:

您的规则存在许多问题。 Spome 的匹配模式永远不会匹配,请阅读更多关于正则表达式的内容。而且整体逻辑出现了部分反转,你要重新考虑一下。

这是一种可以为您指明正确方向的替代方法:

RewriteEngine on

# unconditionally redirect http to https
RewriteCond %HTTPS !=on
RewriteRule ^ https://%HTTP_HOST%REQUEST_URI [R=301,END]

# redirect argument "username=xxx" to the "subdomain"
RewriteCond %HTTP_HOST ^(www\.)?example\.com$ [NC]
RewriteCond %QUERY_STRING (?:^|&)username=([a-z][a-z0-9-]+)(?:&|$) [NC]
RewriteRule ^ https://%1.example.com%REQUEST_URI [QSD,R=301]

# internally rewrite "subdomain" requests and specify the user name as argument
RewriteCond %HTTP_HOST ^(?:(www)\.)?([^.]+)\.example\.com$ [NC]
RewriteRule ^ %REQUEST_URI?username=%1 [QSA,END]

我没有测试过,只是把它写下来,所以希望它没有小错误:-)

最好先从 302 临时重定向开始,稍后再将其更改为 301 永久重定向,前提是您确定一切都已正确设置。这样可以防止在尝试时出现缓存问题...

如果您使用上述规则收到内部服务器错误(http 状态 500),那么您很可能操作的是非常旧版本的 apache http 服务器。在这种情况下,您将在 http 服务器错误日志文件中看到不支持的 [END] 标志的明确提示。您可以尝试升级或使用较旧的[L] 标志,在这种情况下它可能会起作用,尽管这取决于您的设置。

此实现同样适用于 http 服务器主机配置或分布式配置文件(“.htaccess”文件)。显然重写模块需要在http服务器内部加载并在http主机中启用。如果您使用分布式配置文件,您需要注意它的解释在主机配置中完全启用,并且它位于主机的 DOCUMENT_ROOT 文件夹中。

一般来说:您应该始终喜欢将此类规则放在 http 服务器主机配置中,而不是使用分布式配置文件(“.htaccess”)。这些分布式配置文件增加了复杂性,通常是意外行为的原因,难以调试,而且它们确实减慢了 http 服务器的速度。它们仅在您无法访问真正的 http 服务器主机配置(阅读:非常便宜的服务提供商)或坚持编写自己的规则的应用程序(这是一个明显的安全噩梦)的情况下作为最后一个选项提供。

【讨论】:

我试过了,但它对我不起作用,唯一有效的部分是 http 到 https。所有其他通配符子域保持不变,并重定向到 DNS 记录中的主域。另外,如果我在参数username=xxx 之前添加一个文件,例如send.php?username=xxx,则会出现错误。如果是的话,情况会怎样? 我不明白您所说的“所有其他通配符子域保持不变并重定向到 DNS 记录中的主域”是什么意思......现在它们是“保持不变”还是重定向? DNS 记录与此有什么关系? 我也无法理解 send.php 脚​​本背后的想法。它有什么作用?该名称表明它发送用户名,我希望它然后将客户端转发到基于用户名的“子域”。但是为此,您不需要脚本,正如我演示的那样,可以在协议级别完成。看起来您需要修改您的问题以添加更多详细信息和更精确地说明您实际上想要做什么...... 我创建了一个通配符 DNS 记录来将所有子域 *.domain.com 重定向到 domain.com。我不是很好,因为我是 virtualhosts 规则的新手,而且我正在努力解决问题,所以请原谅我没有正确解释自己。我正在尝试制作一个脚本,您可以在其中通过domain.com/send.php?username=xxx 向用户发送消息,其中用户名是您要向其发送消息的用户。我正在尝试制定规则以使每个用户都有一个子域,我希望 URL 保持与输入的 xxx.domain.com 相同,同时它将用户静默重定向到 send.php?username=xxx 您无法通过 DNS 条目进行重定向。 DNS 仅将主机名解析为 IP 地址。您的通配符条目将域“example.com”内的所有主机名解析为相同的 IP 地址,但请求仍然以相同的主机名为目标。它是由 http 服务器来处理的。这就是虚拟主机的用途。

以上是关于DB2 参数通配符的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 学习三 关于转义

Java 泛型方法泛型类通配符通配符上下限

为啥使用通配符将参数数量减半会因“参数列表太长”而失败? [复制]

PHP值相等参数中的通配符

在存储过程中使用通配符连接参数是不是安全?

泛型、类型参数和通配符