我正在尝试将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
答案 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;
...有效。我只需要过滤掉客户端中的虚假行。