sql - 测试函数的多个值
Posted
技术标签:
【中文标题】sql - 测试函数的多个值【英文标题】:sql - multiple values to test function 【发布时间】:2011-10-04 11:24:57 【问题描述】:我正在尝试测试一个函数(在这种情况下 - regexp_replace(tvalue,'([[:cntrl:]])',''))并且想知道是否有办法通过多个输入数据到一个 SQL 查询中的函数?
基本上我想看到一个函数正在替换不可打印的字符,我的想法如下:
我的伪代码:
with testdata as (select
'teststring1',
'$kfjs',
chr(10)||'test',
' <>',
null,
'[&,''/\'
from dual)
select tvalue, regexp_replace(tvalue,'([[:cntrl:]])','') from testdata
where tvalue <> regexp_replace(tvalue,'([[:cntrl:]])','');
【问题讨论】:
【参考方案1】:with testdata as (
select 'teststring1' as tvalue from dual
union all
select '$kfjs' from dual
union all
select 'str1' || chr(10) || 'str2' from dual
union all
select ' <>' from dual
union all
select null from dual
union all
select '[&,''/' from dual
)
select rownum, tvalue, regexp_replace(tvalue, '([[:cntrl:]])', '') from testdata
where tvalue <> regexp_replace(tvalue, '([[:cntrl:]])', '');
【讨论】:
你知道另一种方法不需要对我要测试的每个字符串使用良好的 ol' 联合吗? @toop - 你对 UNION 运算符的反对是什么? 虽然,在这种情况下,UNION ALL 比 UNION 好,因为我们不需要筛选出重复项,所以我们可以为自己省去一个排序操作。 @toop:你可能会写一个表函数来做同样的事情,我不确定这是否更好/更容易。【参考方案2】:如果您创建用户定义的数据类型,则可以将该类型用作构造函数,并通过 table
函数生成一组值。
CREATE TYPE test_data AS TABLE OF VARCHAR2(40);
SELECT COLUMN_VALUE, REGEXP_REPLACE(COLUMN_VALUE, '([[:cntrl:]])', '')
FROM table(test_data(
'teststring1',
'$kfjs',
CHR(10) || 'test',
' <>',
NULL,
'[&,''/\'
))
WHERE COLUMN_VALUE <> REGEXP_REPLACE(COLUMN_VALUE, '([[:cntrl:]])', '');
【讨论】:
【参考方案3】:这很简单。在名为 testdata 的数据库中创建一个表,在其中添加您的案例,然后运行您的查询:
select rownum, tvalue, regexp_replace(tvalue, '([[:cntrl:]])', '')
from testdata
where tvalue <> regexp_replace(tvalue, '([[:cntrl:]])', '')
【讨论】:
以上是关于sql - 测试函数的多个值的主要内容,如果未能解决你的问题,请参考以下文章