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

如何排除sys所有者视图以加速GetSchema("Views")执行?

如何排除Oracle中sys所有者的视图

方法一:通过GetSchema的限制参数直接过滤

Oracle .NET数据提供者的GetSchema("Views")方法支持通过限制参数指定所有者范围。你可以将限制数组的第一个元素(对应OWNER字段)直接设置为需要查询的业务用户,这是最高效的方式:

// Views的限制参数最多支持4项,第一项对应所有者字段
string[] restrictionsArray = new string[4];
// 替换成你的业务用户名称,比如"MY_APP_USER"
restrictionsArray[0] = "MY_APP_USER";
DataTable schema = connection.GetSchema("Views", restrictionsArray);

方法二:获取所有视图后在内存中过滤

如果不确定具体的业务所有者,或者直接限制参数不生效,可以先获取全部视图,再通过LINQ过滤掉sys所有者的记录:

string[] restrictionsArray = new string[2];
DataTable allViews = connection.GetSchema("Views", restrictionsArray);
// 过滤掉OWNER为SYS的视图(忽略大小写匹配)
DataTable filteredViews = allViews.AsEnumerable()
    .Where(row => !string.Equals(row.Field<string>("OWNER"), "SYS", StringComparison.OrdinalIgnoreCase))
    .CopyToDataTable();

关于查询速度差异的说明

默认情况下,GetSchema("Tables")只会返回当前用户有权限访问的业务表,而GetSchema("Views")会返回所有可见的系统视图(sys所有者)和业务视图,这就是前者瞬间完成、后者耗时久且结果量巨大的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:13:18