带有字节数组的Oracle PL / SQL更新

时间:2018-12-19 19:06:26

标签: java sql oracle plsql

我有一个字节数组,我试图填充到现有记录中。 我需要完成脚本的帮助。 我不确定如何在脚本中接受字节数组。

我尚未在数据库中编译脚本。只想确保脚本首先正确运行即可。

这是在oracle数据库中的记录,我试图将字节数组添加到表名称为account

的列中。

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 :(得分:1)

假设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();