Преобразование SQL-запроса SELECT UNIQUE 1 в программе Informix-4GL в код Java

Я хочу преобразовать программу Informix-4GL в Java, но у меня возникли проблемы. У меня есть код Java, и я успешно подключаюсь к Informix, но у меня возникли проблемы.

  1. Как я могу использовать «SELECT UNIQUE 1 ...» в методе executeQuery (), потому что UNIQUE 1 не TSQL.
  2. SQLCA.SQLCODE означает, что запрос SQL верен, а затем возвращается 0. Как я могу получить переменную SQLCA.SQLCODE в Java или Java, которая может предоставлять ту же функцию.

Глядя на сегмент кода 4GL ниже; это означает, что если запрос SQL возвращает какие-либо строки, тогда SQLCA.SQLCODE возвращает 0 и устанавливает SW_FBCHK = 1.

SELECT  UNIQUE  1  FROM  FBFIL:FBRDPF1
       WHERE  COMPID  =  G_DEPTWN
         AND  FPRDAT  =  IO_FONLY.PRTDAT
         AND  INSU01  =  '5'
      IF  SQLCA.SQLCODE  =  0  THEN
          LET  SW_FBCHK  =  1
      ELSE
          LET  SW_FBCHK  =  0
      END IF

person user1774492    schedule 25.10.2012    source источник


Ответы (2)


В Informix SELECT UNIQUE является нестандартным эквивалентом стандартного SELECT DISTINCT.

Запрос проверяет, есть ли в вашей таблице FBFIL:FBRDPF1 (что означает таблица FBRDPF1 в базе данных FBFIL) какие-либо строки, удовлетворяющие условиям:

WHERE COMPID = g_deptwn
  AND FPRDAT = io_fonly.prtdat
  AND INSU01 = '5'

В этом состоянии разумно предположить, что g_deptwn является глобальной переменной (многие люди используют префикс g_ для обозначения глобальной переменной), и io_fonly.prtdat, вероятно, также является переменной. Итак, вам нужно передать эти значения в оператор Java SQL. Имена на левой стороне условий, вероятно, являются столбцами в таблице, а не несколькими переменными I4GL. Вам нужно будет решить, где находится указанная таблица в вашей системе SQL Server.

В Java вы будете использовать JDBC, поэтому вам нужно будет выполнить запрос и попытаться получить строку (возможно, предоставив переменную для получения значения 1). Если этот запрос завершится успешно, вы установите Java-аналог SW_FBCHK на 1; в противном случае вы установите значение 0. Не забудьте освободить ресурсы из запроса.

person Jonathan Leffler    schedule 26.10.2012

Поскольку вы только пытаетесь добиться успеха, есть несколько других вариантов.

SELECT DISTINCT INSU01 ...

кажется наиболее очевидным кандидатом. Если у вас нет такого фиксированного предиката в вашем запросе, вам, возможно, придется подумать о тестировании вывода SELECT COUNT(*) ..., что будет означать небольшое изменение вашей логики.

person RET    schedule 25.10.2012