0

我正在尝试将带有一些数据的 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 框架:1.1

甲骨文 9i

4

5 回答 5

0

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

于 2009-01-02T17:14:18.280 回答
0

也许问题不在于语句,而在于“uar”表的第二列。
您可以尝试使用不同的表进行查询来确认这一点吗?

于 2009-01-02T09:36:36.780 回答
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 将始终包含在左外连接中。

于 2009-01-02T18:12:01.330 回答
0

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

于 2009-01-02T18:14:09.983 回答
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;

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

于 2019-05-10T19:42:08.377 回答