我想从查询结果中删除空行和空格,并使用下面的代码,我在哪里做错了?我有2个连接从不同的用户获得结果。我使用get.ddl获取过程定义并尝试比较它们是否相同.Belows是我的2个程序ddl结果并且它们是相同的,但由于空行结果显示不相同
首先查询结果:
CREATE OR REPLACE PROCEDURE "HELL_"
as
begin
dbms_output.put_line('Hello!');
end;
第二个查询结果(有空行)
CREATE OR REPLACE PROCEDURE "HELL_"
as
begin
dbms_output.put_line('Hello!');
end;
我的代码
string result1 = "";
string result2 = "";
using (OracleConnection conn1 = new OracleConnection(oradb1))
{
conn1.Open();
using (OracleCommand crtCommand = new OracleCommand("select REGEXP_REPLACE(dbms_metadata.get_ddl('PROCEDURE','HELL_'),('user1...'),'', 1, 0, 'i') from dual", conn1))
{
result1 = crtCommand.ExecuteScalar().ToString();
}
}
using (OracleConnection conn2 = new OracleConnection(oradb2))
{
conn2.Open();
using (OracleCommand crtCommand = new OracleCommand("select REGEXP_REPLACE(dbms_metadata.get_ddl('PROCEDURE','HELL_'),('user2...'),'', 1, 0, 'i') from dual", conn2))
{
result2 = crtCommand.ExecuteScalar().ToString();
}
}
var lines1 = result1.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Where(l => l.Trim().Length > 0).Select(l => l.Trim());
var lines2 = result2.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Where(l => l.Trim().Length > 0).Select(l => l.Trim());
if (lines1.SequenceEqual(lines2))
{
MessageBox.Show("same");
}
else
{
MessageBox.Show("not same");
}
答案 0 :(得分:1)
有两种方法可以删除结果集中的空行(仅包含换行符的行):
让我们创建一个简单的存储过程:
SQL> create or replace procedure Some_Proc
2 is
3
4
5 begin
6
7 null;
8
9
10 end;
11 /
Procedure created
通过查询user_source view
或使用dbms_metadata
,我们会得到以下结果:
select t.text
from all_source t
where name = upper('some_proc')
结果:
Text
-------------------------------
procedure Some_Proc
is
begin
null;
end;
使用[dba][user][all]_source
视图查询时,摆脱空行
rtrim()
功能:
select t.text
from all_source t
where name = upper('some_proc')
and rtrim(t.text, chr(10)) is not null
结果:
Text
-------------------
procedure Some_Proc
is
begin
null;
end;
在dbms_metadata.get_ddl()
返回的结果数据中删除空行
函数使用regexp_replace()
正则表达式函数:
select regexp_replace(
dbms_metadata.get_ddl( 'PROCEDURE'
,'SOME_PROC'
, user
)
, '('||chr(10)||'){2,}', chr(10)
) as res
from dual
结果:
Res
------------------------
CREATE OR REPLACE PROCEDURE "HR"."SOME_PROC"
is
begin
null;
end;
答案 1 :(得分:0)
即使添加了空白行,您似乎也希望将文件视为相等。我的建议是,如果你想要忽略空白行,你应该通过你正在创建的集合(lines1和lines2)来消除零长度行。
分享并享受。