.NET и Oracle: соединение таблицы с пустым набором другой таблицы - PullRequest
0 голосов
/ 02 января 2009

Я пытаюсь присоединить таблицу A с некоторыми данными к пустому набору другой таблицы B. Основная цель - получить все столбцы таблицы B. Мне не нужны никакие данные таблицы B.

Я создал следующий 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] является недействительным или неинициализированным номером


Config:

.NET Framework: 1.1

Oracle 9i

Ответы [ 5 ]

0 голосов
/ 10 мая 2019

Я знаю, что это старый поток, но если у кого-то еще возникла проблема «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;

... работает. Мне просто нужно было отфильтровать фиктивную строку в моем клиенте.

0 голосов
/ 02 января 2009

Какую версию клиентского драйвера вы используете? Под этим я подразумеваю актуальную полную версию. Например, если вы используете OleDB для связи с Oracle, версия файла ORAOLEDB.DLL. Например, это 9.2.0.7?

0 голосов
/ 02 января 2009

Попробуйте явно перечислить все ваши столбцы и просмотрите все типы данных, в частности, второй столбец uar.

0 голосов
/ 02 января 2009

Я не слишком знаком с 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 всегда будет включен в левое внешнее соединение.

0 голосов
/ 02 января 2009

Возможно, проблема не в выражении, а в чем-то во втором столбце таблицы "uar".
Можете ли вы попробовать запрос с другой таблицей, чтобы подтвердить это?

...