powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-24360 when called stored procedure
3 сообщений из 3, страница 1 из 1
ORA-24360 when called stored procedure
    #39541048
avang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изначально в проекте использовался драйвер оракла thin (oracle.jdbc.driver.OracleDriver), и был написан вызов хранимой процедуры с передачей в нее "пользовательской" структуры данных (тип данных создан в БД). Процедура вызывалась, все работало корректно. Затем потребовалось перевести проект на драйвер oci. После переключения на oci вызовы процедур без "пользовательских" структур продолжил работать корректно, но вызов процедур с "пользовательскими" структурами приводит к ошибке: java.sql.SQLException: ORA-24360: 'Type Descriptor Object' не задан для 'Object Bind/Define'

Код вызова процедуры прилагаю:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
public FileInfo saveFile(String relativePath, MultipartFile file, String tableName, UUID id, String oraDirectoryName, boolean storeData, String note, Date fileDate) throws Exception {
        Connection connection = null;
        CallableStatement statement = null;
        UUID fileInfoId = null;
//        String rootSchema = conf.getStaticValue("root_schema");
        try {
            connection = dataSource.getConnection();
            statement = connection.prepareCall("{ ? = call saveFileContent(?, ?, ?, ?) }");
            statement.registerOutParameter (1, OracleTypes.RAW);
            statement.setString(2, sec.getCurrentUserName());
            statement.setString(3, sec.getCurrentCode());

            relativePath = relativePath == null ? "" : relativePath.replaceFirst("\\+", "").replaceFirst("/*", "");

            Object[] fileInfoConfigObj = new Object[8];

            fileInfoConfigObj[0] = relativePath + "\\" + file.getOriginalFilename();
            fileInfoConfigObj[1] = oraDirectoryName;
            fileInfoConfigObj[2] = file.getContentType();
            fileInfoConfigObj[3] = file.getSize();
            fileInfoConfigObj[4] = storeData ? file.getBytes() : null;
            fileInfoConfigObj[5] = note;
            fileInfoConfigObj[6] = tableName;
            fileInfoConfigObj[7] = UUIDUtils.getBytes(id);
            Struct struct = connection.createStruct("FILEINFO_ROWTYPE", fileInfoConfigObj);

            statement.setObject(4, struct);
            statement.setObject(5, file.getBytes());

            statement.execute();
            byte[] fileInfoBytes = (byte[]) statement.getObject(1);
            fileInfoId = UUIDUtils.fromByteArray(fileInfoBytes);
        } catch (Exception ex) {
            try {
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            ex.printStackTrace();
            throw new SaveFileException(ex.getMessage());
        } finally {
            try { if (statement != null) statement.close(); } catch (Exception ignored) { }
            try { if (connection != null) connection.close(); } catch (Exception ignored) { }
        }

        return fileInfoId != null ? getFileInfo(fileInfoId) : null;
//        return result;
    }



Ощибка указывает на строчку: statement.execute();
В чем причина ошибки и как ее устранить?
...
Рейтинг: 0 / 0
ORA-24360 when called stored procedure
    #39541138
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avang,

попробуйте оракловые библиотеки, а не java.sql.*
Код: java
1.
2.
3.
4.
OracleOCIConnection

OraclePreparedStatement opstmt;
opstmt.setORAData (4, struct );
...
Рейтинг: 0 / 0
ORA-24360 when called stored procedure
    #39542185
avang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С оракловыми библиотеками все тоже самое.
Разобрался с проблемой.
Причина ошибки - косяк с правами. Владельцем функции был другой пользователь (функция располагалась в схеме другого пользователя), как и пользовательского типа, используемого в параметрах функции. Для функции был создан публичный алиас. Пользователю, который вызывал функцию, были даны права на ее исполнение, но не были даны права на исполнение пользовательского типа.
Код: plsql
1.
grant execute on fileinfo_rowtype to some_user; 


исправил ошибку.

Единственная странность в том, что при отсутствии прав у пользователя на тип данных функция корректно вызывалась под драйвером thin.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-24360 when called stored procedure
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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