powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Получение вставленного id из insert ORA-01001: неверный курсор
12 сообщений из 12, страница 1 из 1
Получение вставленного id из insert ORA-01001: неверный курсор
    #40043976
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь получить id вставленной записи.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CallableStatement cst = getConnection().prepareCall("{INSERT INTO STAFF (id_client, id_filial, status) VALUES(?, ?, ?) RETURNING primary_key_field INTO ?}");
boolean success = false;
for (Staff emp : org.getStaff()) {
		cst.setLong(1, org.getClientId());
		cst.setInt(2, org.getFilialId());
		cst.setInt(3, emp.getStatus());
		cst.registerOutParameter(4, Types.INTEGER);
		cst.setEscapeProcessing(false);
		cst.execute();
		int id = cst.getInt(4);
}



execute падает с java.sql.SQLException: ORA-01001: неверный курсор

До того, как добавил cst.setEscapeProcessing(false) было java.sql.SQLException: Не поддерживаемый маркер SQL92 в позиции: 1
Если insert не заключать в фигурные скобки, то java.sql.SQLException: Не все возвращаемые параметры зарегистрированы


Вообще, должен ли работать такой способ для получения вставленного id? id генерится сиквенсом, на таблице триггер before INSERT.
...
Рейтинг: 0 / 0
Получение вставленного id из insert ORA-01001: неверный курсор
    #40043983
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В гуглах пишут что вот так надо

Код: java
1.
2.
3.
4.
5.
6.
String query = "BEGIN INSERT INTO team (name) values (?) returning id into ?; END;";
CallableStatement cs = conn.prepareCall(query);
cs.setString(1, "cougars");
cs.registerOutParameter(2, OracleTypes.NUMBER);
cs.execute();
System.out.println(cs.getInt(2));
...
Рейтинг: 0 / 0
Получение вставленного id из insert ORA-01001: неверный курсор
    #40043985
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насчет комбинации с триггером не в курсе, но если юзать триггер напрямую - через spring-jdbc я обычно юзал
Код: java
1.
org.springframework.jdbc.support.GeneratedKeyHolder

, а он в свою очередь использует
Код: java
1.
java.sql.Statement#getGeneratedKeys

.
Почему не используется он? есть какие то причины?
...
Рейтинг: 0 / 0
Получение вставленного id из insert ORA-01001: неверный курсор
    #40043994
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavel_nv,
Spring с jdbc моветон
...
Рейтинг: 0 / 0
Получение вставленного id из insert ORA-01001: неверный курсор
    #40043998
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

почему это?) каждому инструменту - свое применение. Хочешь спуститься на уровень ниже - почему бы и нет, все таки тот же хибер имеет накладные расходы.
...
Рейтинг: 0 / 0
Получение вставленного id из insert ORA-01001: неверный курсор
    #40044005
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavel_nv,
Ну и спустись ниже. Не указывай зависимость в import
Правила хорошего тона не смешивать.
ОРМ и jdbc.
Другое дело если бы без спринга невозможно.
...
Рейтинг: 0 / 0
Получение вставленного id из insert ORA-01001: неверный курсор
    #40044007
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
pavel_nv,
Правила хорошего тона не смешивать.
ОРМ и jdbc.


Ни слова не было о смешивании ОРМ и jdbc. Был только spring-jdbc на проекте, которому более 10 лет.
Так то можно и guava и commons-* не указывать в зависимости, а писать свое. Тут уже как говорится - up to you.
...
Рейтинг: 0 / 0
Получение вставленного id из insert ORA-01001: неверный курсор
    #40044010
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
В гуглах пишут что вот так надо

Код: java
1.
2.
3.
4.
5.
6.
String query = "BEGIN INSERT INTO team (name) values (?) returning id into ?; END;";
CallableStatement cs = conn.prepareCall(query);
cs.setString(1, "cougars");
cs.registerOutParameter(2, OracleTypes.NUMBER);
cs.execute();
System.out.println(cs.getInt(2));



Так получилось, спасибо.
...
Рейтинг: 0 / 0
Получение вставленного id из insert ORA-01001: неверный курсор
    #40044016
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут обошлись без фигурных скобАчек.

https://docs.oracle.com/cd/E11882_01/java.112/e16548/oraint.htm#JJDBC28178
...
Рейтинг: 0 / 0
Получение вставленного id из insert ORA-01001: неверный курсор
    #40044023
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavel_nv
PetroNotC Sharp
pavel_nv,
Правила хорошего тона не смешивать.
ОРМ и jdbc.


Ни слова не было о смешивании ОРМ и jdbc. Был только spring-jdbc на проекте, которому более 10 лет.
Так то можно и guava и commons-* не указывать в зависимости, а писать свое. Тут уже как говорится - up to you.

1. В хибере есть вызов родного sql. Ты считаешь можно его вкорячить в проект? Не будет винигрет?
2. Скажи, зачем вам спринг с jdbc 10 лет?
3. Выше дали ответ без спринга и никто ничего не писал.
"Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand.
...
Рейтинг: 0 / 0
Получение вставленного id из insert ORA-01001: неверный курсор
    #40044029
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том что современный (и еще проприетарный SQL) сложен и интересен. А хибер покрывает его 20% возможностей
да и то в части CRUD.

Используйте SQL. Это умный и самодостаточный язык. И ему не нужный прослойки.
...
Рейтинг: 0 / 0
Получение вставленного id из insert ORA-01001: неверный курсор
    #40044272
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Дело в том что современный (и еще проприетарный SQL) сложен и интересен. А хибер покрывает его 20% возможностей
да и то в части CRUD.

Используйте SQL. Это умный и самодостаточный язык. И ему не нужный прослойки.


Добавлю ОРМ - зло!

ИМХО хибернейт имеет смысл использовать пока хватает spring-data-jpa репозиториев.
Как нужно "что не стандартное", то имеет перейти на JDBC.
Для этого в Spring есть JdbcTemplate - как синтаксический сахар, над стандартным jdbc.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Получение вставленного id из insert ORA-01001: неверный курсор
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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