oracle PL / SQL обновление с байтовым массивом - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть байтовый массив, который я пытаюсь вставить в существующую запись.Мне нужна помощь с завершением сценария.Я не уверен, как принять байтовый массив в скрипте.

Я еще не скомпилировал скрипт в базе данных.Просто хочу убедиться, что скрипт сначала работает правильно.

Вот как выглядит запись в Oracle db, где я пытаюсь добавить массив байтов в столбец LOGO таблицы.имя учетной записи

enter image description here

Вот метод, который вызовет сценарий pl / sql.Я не уверен на 100%, правильно ли это.

public void saveLogo(final int accountID, final byte[] data){
    (new Call() {
        protected void execute(Connection connection) throws SQLException {
            CallableStatement statement = null;
            Statement stmt = null;
            try {

                statement = connection.prepareCall("{ ? = call updateCompanyLogo(?,?) }");
                statement.registerOutParameter(1, OracleTypes.INTEGER);
                statement.setBytes(1, data);
                statement.setInt(2,accountID);
                statement.execute();
            } finally {
                stmt.close();
                connection.close();
            }

        }
    }).execute();
}

Вот моя попытка сценария pl / sql, который вставит массив байтов в запись.

create or replace function updateCompanyLogo (
l_accountID in number,
byte array(BLOB))

is

begin

update account
set logo = byte
where id = l_accountID;


end;

/

Как мнедобавить этот байтовый массив в качестве параметра в pl / sql и установить его?Заранее спасибо, потому что я застрял

1 Ответ

0 голосов
/ 19 декабря 2018

Если предположить, что столбец LOGO имеет тип BLOB, сценарий PL / SQL должен выглядеть примерно так:

create or replace function updateCompanyLogo (
l_accountID in number,
p_Array in BLOB)

as

begin

update account
set logo = p_Array
where id = l_accountID;


end;

/

И последующая логика Java для вызова должна выглядеть следующим образом:

stmt = connection.prepareCall("{CALL updateCompanyLogo(?,?)}");
stmt.setInt(1,accountID);
stmt.setBytes(2, accountID);
stmt.execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...