【发布时间】:2019-04-25 03:05:13
【问题描述】:
我正在尝试获取当前 Oracle 用户拥有的表的列表。我在 oracle 中创建了用户,其中我有以下 2 个表:
类别
地址
现在,当我在 oracle 中运行以下查询时,我只得到了我想要的 2 个表:
SELECT table_name FROM user_tables;
上述查询参考:https://www.arungudelli.com/tutorial/oracle/list-all-tables-in-oracle-query/
但问题是当我尝试使用GetSchema 方法获取表列表时,我什么也得不到:
public Datatable GetTables(DbConnection conn)
{
conn.Open();
if (conn.State == ConnectionState.Open)
{
var tables = conn.GetSchema("Tables", new string[] { "user_tables" });
}
conn.Close();
}
现在当我喜欢下面的时候,我得到了不必要的表(> 1000),它们是系统表和其他表(虽然我只有类别和地址表,但不知道它们来自哪里):
var tables = conn.GetSchema("Tables");
所以我只想获取当前Oracle用户拥有的表列表。下面是我的连接字符串:
data source="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyService)))";user id=C##Db1;password=root123;
有人可以帮我解决这个问题吗?
【问题讨论】:
-
您的用户是否拥有这些表?
-
@LachlanLindsay 是的,正如我在问题中提到的,类别和地址表是用户在连接字符串中提到的唯一表
-
通过c#代码访问数据库时,“当前”用户是谁?似乎应用程序以用户 SYSDBA 或其他一些管理员帐户的身份连接到数据库(这就是您获得数千个表的原因)。如果应用程序以 SYSDBA 身份连接,Oracle 数据库应该如何知道您想要某些特定用户的表?
-
@mathguy 通过连接字符串?因为连接字符串有关于用户的信息。不是吗?
标签: c# oracle ado.net oracle12c