.NET和Oracle:将表连接到另一个表的空集

时间:2009-01-02 08:31:11

标签: .net sql join oracle9i

我正在尝试将tableA与一些数据连接到另一个tableB的空集。主要目的是获取tableB的所有列。我不需要tableB的任何数据。

我构建了以下SQL:

SELECT uar.*, s.screen_id, s.screen_name
FROM crs_screens 
 LEFT JOIN crs\_user\_access\_right uar
 ON s.rid IS NOT NULL AND uar.rid IS NULL

这个SQL在TOAD上运行完美,但在我的VB.NET OracleDataAdapter.Fill(DataTable)语句中使用它时会返回错误。

如果有解决办法可以达到同样的效果。非常感谢你。


错误讯息:

  

OCI-22060:参数[2]是无效或未初始化的数字


配置:

.NET framework:1.1

Oracle 9i

5 个答案:

答案 0 :(得分:0)

也许问题不在于声明,而在于“uar”表的第二列 你可以尝试使用不同的表来确认这个吗?

答案 1 :(得分:0)

尝试明确列出所有列并查看所有数据类型 - 尤其是第二列的uar。

答案 2 :(得分:0)

我对Oracle不太熟悉(所以我不能说它是否是一个特定的Oracle问题),但也许重新编写你的SQL就可以了:

SELECT
  uar.*, s.screen_id, s.screen_name
FROM 
  crs_screen s 
    LEFT JOIN crs_user_access_right uar ON uar.rid <> uar.rid

你不应该在s.rid上进行比较,因为在左侧,crs_screen将始终包含在左外连接中。

答案 3 :(得分:0)

您运行的是哪个版本的客户端驱动程序?我的意思是实际的完整版。例如,如果您使用OleDB与Oracle交谈,那么ORAOLEDB.DLL文件的版本。例如,它是9.2.0.7吗?

答案 4 :(得分:0)

我知道这是一个旧线程,但是如果其他任何人都遇到“ OCI-22060:参数[2]是无效或未初始化的数字”的问题,那么我已经找到了一种适用于我的解决方案。

原始光标:

select l.t_id, r.t_name, r.t_desc
left_table l left join right_table r
on r.t_id = l.t_id;

...的简单重构...

select -99999999 t_id, 'XXXXXXXXX' t_name, 'YYYYYYYYYYYY' t_desc from dual
union all
select l.t_id, r.t_name, r.t_desc
left_table l left join right_table r
on r.t_id = l.t_id;

...有效。我只需要过滤掉客户端中的虚假行。