现在需要查询数据库中的一张表的表结构情况,查询语句为:
select column_name, data_type, data_length, data_precision, data_scale, nullable, data_default
from all_tab_columns
where lower(table_name) = '......'
order by column_id ASC
该语句在PL/SQL中执行时,可查询出现53条记录,但在C#做好的程序中执行,查出的记录数为0,调试时未发现运行时错误。
在程序中,是用一个循环来查询几十张表的表结构情况,发现大多数都能正常查询,只有两张表不能。可能是什么原因呢?
select column_name, data_type, data_length, data_precision, data_scale, nullable, data_default
from all_tab_columns
where lower(table_name) = '......'
order by column_id ASC
该语句在PL/SQL中执行时,可查询出现53条记录,但在C#做好的程序中执行,查出的记录数为0,调试时未发现运行时错误。
在程序中,是用一个循环来查询几十张表的表结构情况,发现大多数都能正常查询,只有两张表不能。可能是什么原因呢?
解决方案 »
- orale对象及数据转移?
- 配置oracle10 和sqlserver2000之间的透明网关 ora-28545:连接代理时 Net8诊断到错误
- oracle用utl_file的方法生成个文件,如果通过代码得到文件大小
- 各位兄台,请教一个查询方法
- 怎么提高count ()速度????
- oracle为什么不能实现如下语句:delete from 表A,表B where 表A.empid=表B.empid(我是本人初学,在线等)
- 看看这个题目要用哪些函数,有没有可能在一个SQL语句中完成?
- 各位,请看看这个触发器有什么问题?
- oracle 9i exp 8i 数据如何实现???
- 在Oracle中能否只建一用户、建多个表空间呢
- Oracle查询超时应该如何设置。
- BULK INSERT语句在哪来执行?
lower(to_char(table_name))
这是我定义的一个方法,是用一个循环调用该方法的:
for(int i = 0; i < ...; i++)
{
QueryTable(tableName);
}
在QueryTable方法内,使用到一个自定义的类CTable,定义了该类的一个实例t,
该类有一个方法为Query(string sql),作用是传入一个sql语句,返回DataTable,
在QueryTable方法内,对参数tableName(表名)组织出一个sql语句,调用t.Query(sql)
我奇怪的是:
1、如果组织sql语句时错误,那么另有几十张表在调用QueryTable方法时为什么没有问题?
2、在调试时,我是在t.Query方法内设置断点,在其内部获取传入的sql语句,如果是传递参数的问题,那所得的sql语句就有问题,将该sql语句拷贝到PL/SQL中执行应该报错或查询结果也为0,但事实是查询正常,能获得该表的相应表结构记录。
经测试,以下情况会出现楼主的问题
PLSQL查询时,查询用户为userA,表tableA属于userA,故执行
select column_name, data_type, data_length, data_precision, data_scale, nullable, data_default
from all_tab_columns
where lower(table_name) = 'tableA'
order by column_id ASC
时会有53条记录
程序运行时,登录数据库的用户为userB,表tableA不属于userB,故执行查询时查不到任何记录。
请楼主检查userB是否有tableA的权限!
[/code]
我查了一下表的所有者,似乎是权限原因,似乎又不全是:
对照了两张表tableA(查不到)和tableB(查到),
tableA的所有者为A,tableB的所有者为B,而程序中和PL/SQL中都是用system用户登录的。
为什么一个能查到,另一个查不到呢?
在程序中加断点,并输出。