|
|
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Привет всем. Имею такой код: Код: plaintext 1. 2. В результате meta==null. В примерах обычно метадата берется после выполнения, но я хочу выяснить изменяемые параметры, чтобы выдать соответствующие registerOutParameter. Это возможно вообще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 12:57:51 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Зависит от СУБД и некоторых настроек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 13:05:06 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Спасибо, исчерпывающий ответ :-) База - Oracle 9+, родной драйвер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 13:06:19 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Оказалось, что ResultSetMetaData пусто и после выполнения. В чем грабли? Нужно что-то указать уровне Connection или Datasource? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 13:11:09 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 13:21:06 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
СэмкаОказалось, что ResultSetMetaData пусто и после выполнения. В чем грабли? Нужно что-то указать уровне Connection или Datasource? для Prepared/Callable statements getResultSetMetaData неприменимо. можно пользоватсья только getParameterMetaData. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 13:21:15 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Timm для Prepared/Callable statements getResultSetMetaData неприменимо. можно пользоватсья только getParameterMetaData. Меня ввел в заблуждение Sybase. А getParameterMetaData не реализован ни в Sybase, ни в Oracle драйверах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 13:31:45 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Софтверный проктолог Timm для Prepared/Callable statements getResultSetMetaData неприменимо. можно пользоватсья только getParameterMetaData. Меня ввел в заблуждение Sybase. А getParameterMetaData не реализован ни в Sybase, ни в Oracle драйверах . не ври. по крайней мере в дровах от 10-ки - реализован. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 13:34:28 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Ачипятка: CallableStatement stmt = conn.prepareCall(sql); ResultSetMetaData meta = stmt.getMetaData(); ----- Спасибо, нашел ParameterMetaData и сам, но Oracle дает только getParameterCount(). Т.е. он ВООБЩЕ не может дать более подробно? Или нужно другой класс драйвера указать? DD не годится, нет его у меня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 13:36:18 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Timm не ври. по крайней мере в дровах от 10-ки - реализован. Что ты говоришь? Ась? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. MANIFEST.MF Manifest-Version: 1.0 Implementation-Version: "Oracle JDBC Driver version - 10.1.0.5.0" Specification-Title: "Oracle JDBC driver classes for use with JDK1. 4" Specification-Version: "Oracle JDBC Driver version - 10.1.0.5.0" Implementation-Title: "ojdbc14_g.jar" Created-By: 1.2.2 (Sun Microsystems Inc.) Implementation-Time: "Wed Dec 28 05:22:29 2005" Implementation-Vendor: "Oracle Corporation" Specification-Vendor: "Oracle Corporation" . Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 13:46:27 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Софтверный проктолог Timm не ври. по крайней мере в дровах от 10-ки - реализован. Что ты говоришь? Ась? 10r2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 13:49:21 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Timm 10r2. Действительно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 14:03:31 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Ты о родных дровах говоришь или датадиректовских? Родные возвращают ParameterMetaData, но ни один метода там не имплементирован. Или у тебя другая информация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 14:04:02 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Сэмка Спасибо, нашел ParameterMetaData и сам, но Oracle дает только getParameterCount(). Т.е. он ВООБЩЕ не может дать более подробно? пнятно, оказываеццо не реализовано. с другой стороны - в общем случае типы параметров в jdbc до выполнения (без разбора statement'a на клиенте) определить в принципе невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 14:07:47 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Timm Сэмка Спасибо, нашел ParameterMetaData и сам, но Oracle дает только getParameterCount(). Т.е. он ВООБЩЕ не может дать более подробно? пнятно, оказываеццо не реализовано. с другой стороны - в общем случае типы параметров в jdbc до выполнения (без разбора statement'a на клиенте) определить в принципе невозможно. А вот это полная фигня: большинство остальных баз при вызове PrapareCall действительно его разбирают, т.е. в терминах Oracle вызывают parse и describe_columns. Почему Oracle не делает этого - загадка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 14:11:58 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Сэмка Timm Сэмка Спасибо, нашел ParameterMetaData и сам, но Oracle дает только getParameterCount(). Т.е. он ВООБЩЕ не может дать более подробно? пнятно, оказываеццо не реализовано. с другой стороны - в общем случае типы параметров в jdbc до выполнения (без разбора statement'a на клиенте) определить в принципе невозможно. А вот это полная фигня: большинство остальных баз при вызове PrapareCall действительно его разбирают, т.е. в терминах Oracle вызывают parse и describe_columns. Почему Oracle не делает этого - загадка. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 14:53:51 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Это анонимный блок, в чистом JDBC используется конструкция { call <хранимая процедура> } и мне именно это и нужно. Могут быть, конечно, трудности с оверлоудингом, но без оного противовоказаний распарсить сразу нет. Ладно, придется использовать DatabaseMetaData. Timm Сэмка Timm Сэмка Спасибо, нашел ParameterMetaData и сам, но Oracle дает только getParameterCount(). Т.е. он ВООБЩЕ не может дать более подробно? пнятно, оказываеццо не реализовано. с другой стороны - в общем случае типы параметров в jdbc до выполнения (без разбора statement'a на клиенте) определить в принципе невозможно. А вот это полная фигня: большинство остальных баз при вызове PrapareCall действительно его разбирают, т.е. в терминах Oracle вызывают parse и describe_columns. Почему Oracle не делает этого - загадка. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 15:34:44 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
СэмкаЭто анонимный блок, в чистом JDBC используется конструкция { call <хранимая процедура> } и мне именно это и нужно. Могут быть, конечно, трудности с оверлоудингом, но без оного противовоказаний распарсить сразу нет. Ладно, придется использовать DatabaseMetaData. Ну и что? Любой вызов в конечном счете превращается либо в SQL, либо в анонимный PL/SQL блок. другого не дано. С DatabaseMetadata.getProcedureColumns я думаю надо бы поосторожнее - обращается в all_arguments, в условиях почти везде используются like :x. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 15:55:44 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Спасибо, я в курсе, с Oracle 13 лет, поэтому и представляю прекрасно, что не сделано это исключительно из лени :-). DBMS_SQL справлялся с этим прекрасно еще в Oracle 6 (думаю, даже раньше). "Лайки" не сильно страшны: при отсутствии спецсимволов они чудесно превращаются в "равно" еще до выполнения. Странная вообще штука: родной драйвер не делает того, что 3-d party. Абыдна, да? Timm СэмкаЭто анонимный блок, в чистом JDBC используется конструкция { call <хранимая процедура> } и мне именно это и нужно. Могут быть, конечно, трудности с оверлоудингом, но без оного противовоказаний распарсить сразу нет. Ладно, придется использовать DatabaseMetaData. Ну и что? Любой вызов в конечном счете превращается либо в SQL, либо в анонимный PL/SQL блок. другого не дано. С DatabaseMetadata.getProcedureColumns я думаю надо бы поосторожнее - обращается в all_arguments, в условиях почти везде используются like :x. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 16:13:05 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
СэмкаСпасибо, я в курсе, с Oracle 13 лет, поэтому и представляю прекрасно, что не сделано это исключительно из лени :-). Насчет параметров процедур - категорически не согласен. Это просто бессмысленно. СэмкаDBMS_SQL справлялся с этим прекрасно еще в Oracle 6 (думаю, даже раньше) Пример в студию, для такого вызова: begin :x:=:y+1; end; СэмкаСтранная вообще штука: родной драйвер не делает того, что 3-d party. Абыдна, да? Нисколько. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 16:22:23 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Timm СэмкаСпасибо, я в курсе, с Oracle 13 лет, поэтому и представляю прекрасно, что не сделано это исключительно из лени :-). Насчет параметров процедур - категорически не согласен. Это просто бессмысленно. СэмкаDBMS_SQL справлялся с этим прекрасно еще в Oracle 6 (думаю, даже раньше) Пример в студию, для такого вызова: begin :x:=:y+1; end; СэмкаСтранная вообще штука: родной драйвер не делает того, что 3-d party. Абыдна, да? Нисколько. Ладно, с dbms_sql погорячился, давно не пользовался :-). Но где связь между параметрами процедур и связанными переменными анонимного блока ??? Последний компилируется перед выполнением, о нем ничего не известно и все параметры потенциально in out. Т.е. в моем случае это вообще не интересно. То, что вызов конкретной хранимой процедуры превращается в выполнение произвольного анонимного блока - вопрос реализации. Я уже показал выше, что прояснить параметры для конкретной процедуры возможно, вопрос - какой ценой. ЗЫ Бесмысленность - дело такое, на кой говорить, что следуешь спецификации, если что ни метод - то not implemented? Это вопрос не смысла, а качества продукта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 17:06:52 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
СэмкаНо где связь между параметрами процедур и связанными переменными анонимного блока ??? Последний компилируется перед выполнением, о нем ничего не известно и все параметры потенциально in out. Т.е. в моем случае это вообще не интересно. Нет такого понятия как "вызов процедуры/функции". Есть понятие "выполнение анонимного блока PL/SQL". Потенциально он может быть любым, это раз; с учетом неявного преобразования типов и разной семантики выполнения, типы параметров процедур, вообще говоря, бесполезны, это два. СэмкаЗЫ Бесмысленность - дело такое, на кой говорить, что следуешь спецификации, если что ни метод - то not implemented? Это вопрос не смысла, а качества продукта. Нельзя создать "универсальную" спеку, всегда будут какие-то разногласия в имплементации, особенно в случае с базами данных. PS. в каком драйвере-то реализовано? так и не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 17:35:17 |
|
||
|
В какой момент доступно ResultSetMetaData?
|
|||
|---|---|---|---|
|
#18+
Timm СэмкаНо где связь между параметрами процедур и связанными переменными анонимного блока ??? Последний компилируется перед выполнением, о нем ничего не известно и все параметры потенциально in out. Т.е. в моем случае это вообще не интересно. Нет такого понятия как "вызов процедуры/функции". Есть понятие "выполнение анонимного блока PL/SQL". Потенциально он может быть любым, это раз; с учетом неявного преобразования типов и разной семантики выполнения, типы параметров процедур, вообще говоря, бесполезны, это два. На самом деле так оно и есть. Любой call some_stored_proc(...) на самом деле это выполнение анонимного блока begin some_stored_proc(...); end; Более того, например в случае наличия перегруженных версий процедур как раз информация о типах bind-переменных позволяет определить какую именно версию процедуры вызывать. Т.е. даже парсинг анонимного блока в таком случае невозможен без информации о типах параметров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 18:58:13 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34824162&tid=2144525]: |
0ms |
get settings: |
12ms |
get forum list: |
22ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
63ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
87ms |
get tp. blocked users: |
2ms |
| others: | 329ms |
| total: | 543ms |

| 0 / 0 |
