powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / returning, PreparedStatement
19 сообщений из 19, страница 1 из 1
returning, PreparedStatement
    #33567636
Pane
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пожалуйста, помогите разобраться, почему возникает ошибка:

Код: plaintext
1.
2.
3.
4.
5.
6.
      PreparedStatement pstm;
      pstm=con.prepareStatement("insert into ppp(name) values(?) returning id into ?");
      pstm.setString( 1 ,"kkk");
      pstm.execute();
       int  id=pstm.getResultSet().getInt( 2 );
      System.out.println(id);

ORA-01008: не все переменные привязаны
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #33568319
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что JDBC так не умеет. Посмотрите JDBC FAQ на oracle.com, там все подробно расписано; придется оформлять этот оператор как PL/SQL (взять в begin..end скобки) и терять в эффективности.
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #33568326
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заодно, кстати, советую использовать именованные параметры. Вопросики - это для мазохистов.
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #33568547
Евгений Путилин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerПотому что JDBC так не умеет. Посмотрите JDBC FAQ на oracle.com, там все подробно расписано; придется оформлять этот оператор как PL/SQL (взять в begin..end скобки) и терять в эффективности.
JDBC или JDBC драйвер Oracle?
Ничего не мешает иметь
Код: plaintext
1.
2.
3.
4.
5.
ResultSet rs=pstm.executeQuery();
 if (rs.next())
{
   int  id=rs.getInt( 2 );
}
IIRC JDBC от Oracle не правильно работает с препарированными запросами, он не может получить metadata от запроса.

Кстати вот такой запрос не должен выполняться ?
Код: plaintext
1.
      pstm=con.prepareStatement("insert into ppp(name) values(?) returning id");
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #33568645
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений ПутилинJDBC или JDBC драйвер Oracle?
Не готов указать точного виновника.

Евгений ПутилинНичего не мешает иметь
ResultSet rs=pstm.executeQuery();
Это все-таки малость другое. А если точно, то совсем другое :)

Евгений ПутилинКстати вот такой запрос не должен выполняться ?
Код: plaintext
1.
2.
3.
4.
5.
6.
SQL> create table x (id integer);

Table created

SQL> insert into x values ( 1 ) returning id;

ORA- 00925 : missing INTO keyword
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #33568800
Евгений Путилин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Евгений ПутилинJDBC или JDBC драйвер Oracle?
Не готов указать точного виновника.

Если я скажу что для MySQL и Firebird это работает будетли это указанием виновника?
softwarer
Евгений ПутилинНичего не мешает иметь
ResultSet rs=pstm.executeQuery();
Это все-таки малость другое. А если точно, то совсем другое :)

Почему? В во первых в оригинальном посте пропущенrs.next(). Во вторых запрос может быть как возвращающим так и модифицирующим данные.
softwarer
Евгений ПутилинКстати вот такой запрос не должен выполняться ?
Код: plaintext
1.
2.
3.
4.
5.
6.
SQL> create table x (id integer);

Table created

SQL> insert into x values ( 1 ) returning id;

ORA- 00925 : missing INTO keyword

Я не знаток насчет того что как правильно обрабатываются SQL запросы. Кстати м.б. returning это оператор PL/SQL ане SQL?
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #33568984
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений ПутилинЕсли я скажу что для MySQL и Firebird это работает будетли это указанием виновника?
Насколько я в курсе, ни в том, ни в другом нет аналогов конструкции RETURNING. Хотя я могу и ошибиться.

Евгений ПутилинПочему? В во первых в оригинальном посте пропущенrs.next()
Потому что это будет падать (во всяком случае, насколько я помню) и без всякой попытки работать с резалтсетом, которого у insert-а нет. Это падает и будет падать на execute. Результат returning - это out parameter, и работать с ним соответственно нужно через registerOutParameter()/stmt.getInt()

Евгений ПутилинКстати м.б. returning это оператор PL/SQL ане SQL?
Отнюдь. Это не оператор, а конструкция (clause) самого что ни на есть SQL. Не из явы такой код отлично выполняется. Просто когда говорится returning, нужно объяснить, куда именно возвращать этот результат, и вот тут вот в случае JDBC и DML output parameter что-то не срастается. Что именно - не знаю, неинтересно было разбираться. Но если примерно за восемь лет эта проблема так и не была решена, подозреваю засада достаточно непростая.
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #33569772
Евгений Путилин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Евгений ПутилинЕсли я скажу что для MySQL и Firebird это работает будетли это указанием виновника?
Насколько я в курсе, ни в том, ни в другом нет аналогов конструкции RETURNING. Хотя я могу и ошибиться.

Для MySQL не приведу, но встречал для Firebird появилось в 2-ке
Код: plaintext
INSERT INTO ... VALUES (...) [RETURNING <column_list> [INTO <variable_list>]]
softwarer
Евгений ПутилинПочему? В во первых в оригинальном посте пропущенrs.next()
Потому что это будет падать (во всяком случае, насколько я помню) и без всякой попытки работать с резалтсетом, которого у insert-а нет. Это падает и будет падать на execute. Результат returning - это out parameter, и работать с ним соответственно нужно через registerOutParameter()/stmt.getInt()

Так а с чего ты взял что у insert нет resultset? Что мешает выполнить оператор примерно вот такого вида?
Код: plaintext
INSERT INTO ... SELECT ... FROM ... RETURNING <column_list>  
RDBMS сервер должен принять запрос его выполнить и вернуть результат, JDBC как промежуточное звено не должно заботить что это за запрос это ты знаеш что там внутрях
Код: plaintext
INSERT
а JDBC это не должно заботить.

softwarer
Евгений ПутилинКстати м.б. returning это оператор PL/SQL ане SQL?
Отнюдь. Это не оператор, а конструкция (clause) самого что ни на есть SQL.

Судя вот по этому посту
http://www.sql.ru/forum/actualthread.aspx?tid=256419#2396049 ты не прав
softwarer
Не из явы такой код отлично выполняется. Просто когда говорится returning, нужно объяснить, куда именно возвращать этот результат, и вот тут вот в случае JDBC и DML output parameter что-то не срастается. Что именно - не знаю, неинтересно было разбираться. Но если примерно за восемь лет эта проблема так и не была решена, подозреваю засада достаточно непростая.
Или на неё просто положили JDBC это набор интерфейсов и спецификация, IIRC работать с BLOB через JDBC можно только с 10g. До этого надо было использовать спец классы Oracle. М.б. здесь аналогичная ситуация реализованно кусок и а бы как :-)
Делая упор больше на то чот пишется не Java JDBC приложение, а Oracle. По этому читать надо доку не по JDBC а по Oracle.
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #33570646
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений ПутилинТак а с чего ты взял что у insert нет resultset?
По факту. Можно, конечно, взять левую информацию (параметры) и вернуть ее в виде резалтсета "потому что JDBC иначе не умеет". Этого, как я понимаю, не делается (и скорее правильно не делается. Кривизна жуткая).

Евгений ПутилинЧто мешает выполнить оператор примерно вот такого вида?
Код: plaintext
INSERT INTO ... SELECT ... FROM ... RETURNING <column_list>  

То, что в Oracle такого оператора нет. У него другая форма и другой смысл.

Евгений Путилин softwarer Евгений ПутилинКстати м.б. returning это оператор PL/SQL ане SQL?
Отнюдь. Это не оператор, а конструкция (clause) самого что ни на есть SQL.

Судя вот по этому посту http://www.sql.ru/forum/actualthread.aspx?tid=256419#2396049 ты не прав
А судя вот по этому простому эксперименту, я прав.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Connected to Oracle9i Enterprise Edition Release  9 . 2 . 0 . 7 . 0  
Connected as test

SQL> create table x (id integer);

Table created

SQL> var id number;
SQL> insert into x (id) values ( 1 ) returning id into :id;

 1  row inserted

id
---------
 1 

Это конечно если мы считаем, что правильным пацанам дока за аргумент не канает. А что касается указанного поста - это стандартный обход того факта, что (в существующей реализации JDBC, JDBC Oracle driver, Oracle RDBMS Server) не получается взять из insert-а выходные параметры, а вот из pl/sql блока - запросто.

Аналогично - когда существовало BDE, оно не понимало анонимных блоков, начинавшихся с ключевого слова DECLARE. Поэтому приходилось такие блоки оборачивать в дополнительную пару BEGIN-END. Но это нисколько не значит, что в PL/SQL недопустимы DECLARE-блоки.

Евгений Путилин softwarerНо если примерно за восемь лет эта проблема так и не была решена, подозреваю засада достаточно непростая.
Или на неё просто положили
Может быть, но считаю маловероятным. Поскольку эта хрень приводит к реальной потере производительности во-первых, и натыкается на нее почти каждый - во-вторых. Если бы было просто - дешевле сделать, чем объяснять всем, что не сделали :)

Евгений ПутилинJDBC это набор интерфейсов и спецификация, IIRC работать с BLOB через JDBC можно только с 10g. До этого надо было использовать спец классы Oracle. М.б. здесь аналогичная ситуация реализованно кусок и а бы как :-)
Может быть. Честно говоря, попытка работать на "чистом JDBC без Oracle-классов" для меня выглядит страшным сном, так что я не исследовал этот аспект.

Евгений ПутилинДелая упор больше на то чот пишется не Java JDBC приложение, а Oracle. По этому читать надо доку не по JDBC а по Oracle.
К сожалению, не совсем так. Надо читать доку по "JDBC в Oracle" - кажется, в документации к серверу это называется Java Developer Guide. Если бы из Java можно было работать без закапывания в ее особенности, мне было бы куда легче жить :)
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #33570775
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaneПожалуйста, помогите разобраться, почему возникает ошибка:

Код: plaintext
1.
2.
3.
4.
5.
6.
      PreparedStatement pstm;
      pstm=con.prepareStatement("insert into ppp(name) values(?) returning id into ?");
      pstm.setString( 1 ,"kkk");
      pstm.execute();
       int  id=pstm.getResultSet().getInt( 2 );
      System.out.println(id);

ORA-01008: не все переменные привязаны

Параметров 2, а привязан всего один. По-моему CallableStatement позволяет получать параметры назад. На память к сожалению не помню :-(
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #33570808
mansch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
callStmt.registerOutParameter(1, Types.INTEGER); //result
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #33571214
Евгений Путилин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
А судя вот по этому простому эксперименту, я прав.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Connected to Oracle9i Enterprise Edition Release  9 . 2 . 0 . 7 . 0  
Connected as test

SQL> create table x (id integer);

Table created

SQL> var id number;
SQL> insert into x (id) values ( 1 ) returning id into :id;

 1  row inserted

id
---------
 1 

Можеш объяснить глубинный смысл вот этого оператора? И как это соотносится с SQL
Код: plaintext
SQL> var id number; 1 
softwarer
Это конечно если мы считаем, что правильным пацанам дока за аргумент не канает.
Это высказывание совершенно не понятно, если не составит труда разясни что ты имееш ввиду.
softwarer А что касается указанного поста - это стандартный обход того факта, что (в существующей реализации JDBC, JDBC Oracle driver, Oracle RDBMS Server) не получается взять из insert-а выходные параметры, а вот из pl/sql блока - запросто.

Значит
Код: plaintext
 returning 
часть PL а не SQL.
softwarer
Евгений Путилин softwarerНо если примерно за восемь лет эта проблема так и не была решена, подозреваю засада достаточно непростая.
Или на неё просто положили
Может быть, но считаю маловероятным. Поскольку эта хрень приводит к реальной потере производительности во-первых, и натыкается на нее почти каждый - во-вторых. Если бы было просто - дешевле сделать, чем объяснять всем, что не сделали :)

Я в этом не уверен сколько времени тянулось с BLOB? Сделали.
Насчет
Код: plaintext
 returning 
тоже самое. Кстати для Fireberd'a добавление
Код: plaintext
 returning 
в возможности серевера не привело в изменении JDBC драйвера.
softwarer
Евгений ПутилинJDBC это набор интерфейсов и спецификация, IIRC работать с BLOB через JDBC можно только с 10g. До этого надо было использовать спец классы Oracle. М.б. здесь аналогичная ситуация реализованно кусок и а бы как :-)
Может быть. Честно говоря, попытка работать на "чистом JDBC без Oracle-классов" для меня выглядит страшным сном, так что я не исследовал этот аспект. Странно совершенно страно, может быть тогда правельнее назвать Oracle Java OCI маскируюущееся под JDBC? Я всегда думал что там все не чисто но чтобы настолько :-)

softwarer Евгений ПутилинДелая упор больше на то чот пишется не Java JDBC приложение, а Oracle. По этому читать надо доку не по JDBC а по Oracle.
К сожалению, не совсем так. Надо читать доку по "JDBC в Oracle" - кажется, в документации к серверу это называется Java Developer Guide. Если бы из Java можно было работать без закапывания в ее особенности, мне было бы куда легче жить :)
В чьи особенности надо закакпываться? Java или Oracle?
Я вот единственное не могу понять почему надо читать доки по Oracle когда можно читать книги и доки по JDBC
Есть куча программы которе разрабатываются без привязки к БД используюя интерфейсы JDBC/ODBC/OLE DB и т.д. а не используя родное API для БД. Конечно использование родных фич порождает преимужества в виде скорости и т.п. вещей но увы это не всегда приемлемо.
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #33571658
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Путилин
Можеш объяснить глубинный смысл вот этого оператора? И как это соотносится с SQL
Он никак не соотносится с SQL. Это макрос оракловой утилиты SQL*Plus, которой я пользовался, и означает описание параметра - аналог CallableStatement.registerOutParameter().

Евгений Путилин softwarer
Это конечно если мы считаем, что правильным пацанам дока за аргумент не канает.
Это высказывание совершенно не понятно, если не составит труда разясни что ты имееш ввиду.
Я хочу сказать, что конструкция returning описана в Oracle SQL Reference, чего с моей точки вполне достаточно для ответа на вопрос "не является ли она специфичной для PL/SQL".

Евгений ПутилинЗначит
Код: plaintext
 returning 
часть PL а не SQL.
Хм. В одном из моих любимых фильмов присутствует замечательная в своей логичности фраза:

Мадемуазель, если к Вам не прижимаются в метро, это еще не значит, что парижского метро не существует.

Безусловно, java-мир вправе для себя считать returning конструкцией PL/SQL. И если любой эксперимент, проведенный без участия JDBC, покажет отличную работоспособность returning в SQL-контексте... что ж, "если факты противоречат теории - тем хуже для фактов".

Евгений ПутилинЯ в этом не уверен сколько времени тянулось с BLOB? Сделали.
Не знаю. Я честно говоря не в курсе ли сделали ли, ни было ли что делать :) Поскольку сразу работал через оракловые классы.

Евгений ПутилинКстати для Fireberd'a добавление returning в возможности серевера не привело в изменении JDBC драйвера.
Видимо, следует предположить, что использовали ранее реализованный интерфейс, тот же возврат резалтсета.

Евгений ПутилинСтранно совершенно страно, может быть тогда правельнее назвать Oracle Java OCI маскируюущееся под JDBC?
Я не знаю, что Вы называете Oracle Java OCI; никогда не видел такого словосочетания. Это звучит тавтологическим бредом.

Я всегда думал что там все не чисто но чтобы настолько :-)

Евгений ПутилинВ чьи особенности надо закакпываться? Java или Oracle?
Java. Точнее, JDBC. Знания того, что я полагаю "нормальным программированием для Oracle" оказывается недостаточно.

Евгений ПутилинЯ вот единственное не могу понять почему надо читать доки по Oracle когда можно читать книги и доки по JDBC
Потому что их недостаточно для моих требований.

Евгений ПутилинЕсть куча программы которе разрабатываются без привязки к БД используюя интерфейсы JDBC/ODBC/OLE DB
Безусловно. Вообще, есть прорва тривиальных программ и прорва прорв плохих программ :)

Евгений Путилинно увы это не всегда приемлемо.
Сформулирую так: пожалуй, я не назову случая, при котором для серьезной программы я сочту лучшим именно этот подход.
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #33572956
Евгений Путилин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Евгений Путилин
Можеш объяснить глубинный смысл вот этого оператора? И как это соотносится с SQL
Он никак не соотносится с SQL. Это макрос оракловой утилиты SQL*Plus, которой я пользовался, и означает описание параметра - аналог CallableStatement.registerOutParameter().

Понятно т.е. использование SQL конструкции зависит от того как настроенно укружение среды где выполняется эта команда? Т.е. нельзя выцполнить запрос не описав зарание куда возвращаются данные.

В поем представлении оператор select относится к SQL а IF к PL/SQL. Также для Firebird есть модификация select которая относится только к PL, FOR SELECT ... INTO XXX. Она аналогино SELECT из SQL но может быть использованнна только внутри store procedure или trigger. Судя по http://www.sql.ru/forum/actualthread.aspx?tid=256419#2396049 returning действительно c т.з. авторов реализации JDBC для Oracle, как я понимаю это сотрудники упомянутого Oracle.

softwarerЯ хочу сказать, что конструкция returning описана в Oracle SQL Reference, чего с моей точки вполне достаточно для ответа на вопрос "не является ли она специфичной для PL/SQL".

Это значит что правая рука не ведает что творит левая, и разработчики JDBC дравера не читали упомянутую доку. Это было понятно в случае если разработка драйвера велась внешней фирмой но все это произведение одной фирмы.
softwarer
Евгений ПутилинЯ в этом не уверен сколько времени тянулось с BLOB? Сделали.
Не знаю. Я честно говоря не в курсе ли сделали ли, ни было ли что делать :) Поскольку сразу работал через оракловые классы.

Соучествую, как понадобится применить шаблон Delegate сразу огребеш кучу неприятностей. Учитывая что почти все EJB сервера использую wrapper над реальными классамы это может случится при разработки боле менее крупной системы.
softwarer
Евгений ПутилинКстати для Fireberd'a добавление returning в возможности серевера не привело в изменении JDBC драйвера.
Видимо, следует предположить, что использовали ранее реализованный интерфейс, тот же возврат резалтсета.

:-) это значит что с т.з. драйвера не надо анализировать SQL запрос и если сервер возвращает данные то и JDBC драйвер их возвращает, т.е. запрос insert returning с т.з. вызова API не отличается от select с параметрами. Причем и количество измененных записей тоже считается правильно.
softwarer
Евгений ПутилинСтранно совершенно страно, может быть тогда правельнее назвать Oracle Java OCI маскируюущееся под JDBC?
Я не знаю, что Вы называете Oracle Java OCI; никогда не видел такого словосочетания. Это звучит тавтологическим бредом.

Сам придумал, взгляд со стороны на то что сделали
softwarer
Я всегда думал что там все не чисто но чтобы настолько :-)

Опять не понятная фраза. Спасибо за разьяснение предыдущей.
softwarer
Евгений ПутилинВ чьи особенности надо закакпываться? Java или Oracle?
Java. Точнее, JDBC. Знания того, что я полагаю "нормальным программированием для Oracle" оказывается недостаточно.

Евгений ПутилинЯ вот единственное не могу понять почему надо читать доки по Oracle когда можно читать книги и доки по JDBC
Потому что их недостаточно для моих требований.

Согласен кто что пишеш, программу для Oracle с использованием Java или программу на java с использованием Oracle.
softwarer
Евгений ПутилинЕсть куча программы которе разрабатываются без привязки к БД используюя интерфейсы JDBC/ODBC/OLE DB
Безусловно. Вообще, есть прорва тривиальных программ и прорва прорв плохих программ :)

Согласен только Hibernate BEA WebLigic IBM WbeSphere к ним отнести трудно :-)
softwarer
Евгений Путилинно увы это не всегда приемлемо.
Сформулирую так: пожалуй, я не назову случая, при котором для серьезной программы я сочту лучшим именно этот подход.
Разный взгляд на жизнь для меня только один вариант написания програм оправдывает такой подход: "Когда программа пишется подконкретного заказчика один раз и у заказчика нет инфраструктуры с которой нужно интегрироваться" Для продукта которы м.б. использован несколько раз или требуется его интеграция с другими использхование "хакерских фич" вместо стандартов прямая дорога в ...
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #33574636
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений ПутилинПонятно т.е. использование SQL конструкции зависит от того как настроенно укружение среды где выполняется эта команда? Т.е. нельзя выцполнить запрос не описав зарание куда возвращаются данные.
Хм. С тем же успехом его нельзя выполнить, не описав заранее таблиц и функций, в нем участвующих. Согласно синтаксису RETURNING в Oracle для него должны быть определены out параметры, куда возвращается результат. В дельфе, допустим, не потребуется никаких дополнительных действий; просто выполняем запрос с returning и берем значение параметра. В Java - требуется выполнить registerOutParameter(). В sqlplus - выполнить VAR. И так далее.

Евгений ПутилинВ поем представлении оператор select относится к SQL а IF к PL/SQL. Также для Firebird есть модификация select которая относится только к PL, FOR SELECT ... INTO XXX. Она аналогино SELECT из SQL но может быть использованнна только внутри store procedure или trigger.
В Oracle - в целом аналогично.

Евгений ПутилинСудя по http://www.sql.ru/forum/actualthread.aspx?tid=256419#2396049 returning действительно c т.з. авторов реализации JDBC для Oracle, как я понимаю это сотрудники упомянутого Oracle.
Я не понял смысла этой фразы - это первое. Второе - я бы с большой осторожностью делал столь глобальные выводы из единственного поста человека, не являющегося ни автором-сотрудником Oracle, ни кем-либо еще из "особ приближенных".

Могу повторить еще раз: это способ обхода (не факт, что единственный, но общеупотребимый) конкретного глюка в конкретной яве. Кто виноват в этом глюке - JDBC как стандарт, JDBC драйвер оракла, сервер оракла, программист Вася Пупкин - я не знаю; Вы, полагаю, тоже не знаете. Да и не так уж это интересно.

По сути, Вы сейчас придумываете эпицикл с явой посередине :)

Евгений ПутилинЭто значит что правая рука не ведает что творит левая, и разработчики JDBC дравера не читали упомянутую доку.
Не вижу оснований так утверждать.

Евгений Путилинэто значит что с т.з. драйвера не надо анализировать SQL запрос
Не думаю, что драйвер его анализирует.

Евгений Путилин и если сервер возвращает данные то и JDBC драйвер их возвращает, т.е. запрос insert returning с т.з. вызова API не отличается от select с параметрами.
Вот именно что не отличается. У select-а нет out parameters, поэтому и к insert-у их никто не приделывал. Поэтому returning и не работает.

Причем и количество измененных записей тоже считается правильно.

Евгений ПутилинСогласен кто что пишеш, программу для Oracle с использованием Java или программу на java с использованием Oracle.
Для второго класса программ Oracle - неоправданно дорогая игрушка. Да, есть программы сложности записной книжки, которые могут работать "и с Oracle тоже". Ничего плохого в этом нет, но это... неинтересный случай. Такие и вообще без книг легко написать.

Евгений ПутилинСогласен только Hibernate BEA WebLigic IBM WbeSphere к ним отнести трудно
Главное - понять основную мысль. Впрочем, не готов предметно спорить об этих конкретных программах.

Евгений ПутилинДля продукта которы м.б. использован несколько раз или требуется его интеграция с другими использхование "хакерских фич" вместо стандартов прямая дорога в ...
... прямая дорога к хорошо работающему продукту. Который не начинает скрипеть от десятков пользователей и вызывать у администраторов нервный смех.

По сути Вы предлагаете для движения по автобану выбирать между телегой и танком - поскольку любой другой транспорт недостаточно интегрирован со всеми возможными типами дорог и поверхностей.
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #34013952
ddocker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerПотому что JDBC так не умеет. Посмотрите JDBC FAQ на oracle.com, там все подробно расписано; придется оформлять этот оператор как PL/SQL (взять в begin..end скобки) и терять в эффективности.

А что значит JDBC не умеет? А как же вот:
jdbc_faq.htm#34_07
?
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #34013957
ddocker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЗаодно, кстати, советую использовать именованные параметры. Вопросики - это для мазохистов.

Почему для мазохистов?
Потому что при registerOutParameter придется опять эти цифорки порядка учитывать, вместо того что напрямую по имени можно было бы назначить или почему?
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #34013961
ddocker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ddockerА что значит JDBC не умеет? А как же вот:
jdbc_faq.htm#34_07
?

Ссылка неправильная получилась, вот исправленная:
jdbc_faq.htm#34_07
...
Рейтинг: 0 / 0
returning, PreparedStatement
    #34014642
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этом примере нет возвращаемых параметров, а разговор, как я понял, именно о них.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / returning, PreparedStatement
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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