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 - 测试函数的多个值的主要内容,如果未能解决你的问题,请参考以下文章

依赖于数据库视图的集成测试

返回参数被发送到 Mockery 模拟函数?

如何运行返回多个值的Oracle函数

从函数(未定义)jQuery / ifelse返回多个值

sql decode函数里面有多个值怎么办

评估具有不同长度的多个二进制测试答案的正确统计测试/ R 函数是啥?