Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DatabaseMData::geProcedureCols() vs user_arguments 
:(
    Опции темы
setnull
Дата 27.8.2010, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 3.7.2007

Репутация: 1
Всего: 1



Все здравствуйте!!!
Есть тип
Код

create or replace TYPE         "NVARCHAR_ARRAY" AS VARRAY(320000000) OF NVARCHAR2(32767);

Проблема стоит вокруг опоределения параметров процйдур такого типа через ojdbc.
Если анализировать эти параметры в представлении user_arguments, то они там представлены двумя строками 

data_level data_type
0              VARRAY
1              NVARCHAR2

Сейчас же клиентский джава-код анализирует параметры процедур через функцию DatabaseMetaData::geProcedureColumns(), которая в свою очередь возращает только строки, соответствующие строкам user_arguments с data_level=0

В свою очередь, если переводить все, на информацию из user_arguments, то, как мимнимум (еще вплотную не анализировал), user_arguments предоставляет данные о типе через его имя, а geProcedureColumns в значении из java.sql.Types. 

Т.е. вопрос в одном из двух
1) Как средствами jodbc дополниить/расширить информацию  из DatabaseMetaData::geProcedureColumns() недостающей?
либо прийдется переводить все на запросы из user_arguments, и как минимум
2)как корректно отобразить Имя типа в множество java.sql.Types (имеется ввиду не техника, а принцип), т.к. есть подозрение, что это не просто соответствие один к одному, и самому писать - сразу все не предусмотришь... Может это можно сделать также средствами самого ojdbc?

Вообще, хотелось бы решить это как-то первым подходом, т.к. кажется, что переводить на другой источник информации, хоть и похожий, будет в любом случае хлопотнее...

Спасибо!!!
PM MAIL   Вверх
setnull
Дата 30.8.2010, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 3.7.2007

Репутация: 1
Всего: 1



проследил:
одждбси делает такой запрос
Код

SELECT package_name AS procedure_cat,
       owner AS procedure_schem,
       object_name AS procedure_name,
       argument_name AS column_name,
       DECODE(position, 0, 5,
                        DECODE(in_out, 'IN', 1,
                                       'OUT', 4,
                                       'IN/OUT', 2,
                                       0)) AS column_type,
       DECODE (data_type, 'CHAR', 1,
                          'VARCHAR2', 12,
                          'NUMBER', 3,
                          'LONG', -1,
                          'DATE', 93,
                          'RAW', -3,
                          'LONG RAW', -4,
                          'TIMESTAMP', 93, 
                          'TIMESTAMP WITH TIME ZONE', -101, 
               'TIMESTAMP WITH LOCAL TIME ZONE', -102, 
               'INTERVAL YEAR TO MONTH', -103, 
               'INTERVAL DAY TO SECOND', -104, 
               'BINARY_FLOAT', 100, 'BINAvRY_DOUBLE', 101,               1111) AS data_type,
       DECODE(data_type, 'OBJECT', type_owner || '.' || type_name,               data_type) AS type_name,
       DECODE (data_precision, NULL, data_length,
                               data_precision) AS precision,
       data_length AS length,
       data_scale AS scale,
       10 AS radix,
       1 AS nullable,
       NULL AS remarks,
       sequence,
       overload,
       default_value
 FROM all_arguments
WHERE owner LIKE :1 ESCAPE '/'
  AND object_name LIKE :2 ESCAPE '/' AND data_level = 0
  AND package_name LIKE :3 ESCAPE '/'
  AND (argument_name LIKE :5 ESCAPE '/'
       OR (argument_name IS NULL
           AND data_type IS NOT NULL))
ORDER BY procedure_schem, procedure_name, overload, sequence

Привнеслась ясность в процесс декодирования типа...
Но как через ojdbc запросить data_level >= 0
Или как быть, ведь ojdbc не дает даже имени пользовательского типа, чтоб потом уточнить его мету...
Или таки писать свой запрос, во многом дублирующий ????

Это сообщение отредактировал(а) setnull - 30.8.2010, 15:06
PM MAIL   Вверх
ToshaCh
Дата 30.8.2010, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

Репутация: 12
Всего: 26



Хорошо бы этот вопрос отзеркалировать в раздел java, может кто-нить сталкивался. 


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.