powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как в JDBC получить результат вызова функции Oracle типа BOOLEAN
3 сообщений из 3, страница 1 из 1
Как в JDBC получить результат вызова функции Oracle типа BOOLEAN
    #33218343
AciD_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
У меня такй вопрос:
Как в JDBC получить результат вызова функции Oracle типа BOOLEAN?

Более детально.
Есть функция на pl/sql типа:
Код: plaintext
1.
2.
3.
4.
FUNCTION test(p1 VARCHAR2) RETURN BOOLEAN IS
BEGIN
  RETURN True;
END;

Делаю вызов этой функции через JDBC:
Код: plaintext
1.
2.
3.
4.
5.
6.
	CallableStatement cst = con.prepareCall("begin ? := test(?); end;");
	cst.registerOutParameter( 1 , java.sql.Types. BOOLEAN );
	cst.setString( 2 , "admin");
	cst.execute();
	
	 boolean  res = cst.getBoolean( 1 );

В результате получаю такой SQLException: "Недопустимый тип столбца".
Действительно, в Oracle столбец не может иметь тип BOOLEAN.
Отсюда и возник вопрос.

Заранее спасибо за помощью.
...
Рейтинг: 0 / 0
Как в JDBC получить результат вызова функции Oracle типа BOOLEAN
    #33218597
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle® Database JDBC Developer's Guide and Reference
28 Coding Tips and Troubleshooting
28.3 Common Problems
28.3.3 Boolean Parameters in PL/SQL Stored Procedures

Due to a restriction in the OCI layer, the JDBC drivers do not support the passing of BOOLEAN parameters to PL/SQL stored procedures. If a PL/SQL procedure contains BOOLEAN values, you can work around the restriction by wrapping the PL/SQL procedure with a second PL/SQL procedure that accepts the argument as an INT and passes it to the first stored procedure. When the second procedure is called, the server performs the conversion from INT to BOOLEAN.
Но вот если процедура возвращает NUMBER, то cst.getBoolean() пройдет, 0 будет истолкован как FALSE, все остальное - TRUE. Предварительно надо будет сказать cst.registerOutParameter(..., OracleTypes.NUMBER);
...
Рейтинг: 0 / 0
Как в JDBC получить результат вызова функции Oracle типа BOOLEAN
    #33218705
AciD_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению пришлось изменить сигнатуру функции ведя свой подтип, но типа CHAR. Так эффективнее.

Scott Stephens
Scott Stephens
Oracle Tip: Choosing an efficient design for Boolean column values
... We could define a Boolean as NUMBER(1); however, in Oracle's internal number format, 0 takes 1 byte and 1 takes 2 bytes after the length byte (so it's more efficient to store it as CHAR). Even though the character is defined as CHAR, SQL can convert and verify against actual numbers. ...
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как в JDBC получить результат вызова функции Oracle типа BOOLEAN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]