Селект блобов из Oracle в Golang выдает ограниченное количество символов
Перешел с github.com/mattn/go-oci8 на библиотеку github.com/sijms/go-ora/v2 С go-oci8 таких проблем не было, но были другие. Тоже с блобами.
Делаю селект из таблицы, в результате в переменную data вставляется максимум 32769 символа. Если данные в REPORT_FILE меньше размером, то проблем нет. Такое ощущение, что мой код думает, что REPORT_FILE это строка =) Может быть кто-то сможет мне подсказать что я делаю неправильно?
Таблица в оракле. В REPORT_FILE хранятся файлы, переведенные в base64:
CREATE TABLE TRANSINV_EX_FILES (
GUID VARCHAR2(50),
REPORT_NAME VARCHAR2(50),
REPORT_FILE BLOB,
RN NUMBER(17,0),
REPORT_FORMAT VARCHAR2(10)
);
Подключаюсь к базе так:
connString := fmt.Sprintf("oracle://%s:%s@%s:%s/%s", cfg.Username, cfg.Password, cfg.Host, cfg.Port, cfg.DBName)
db, err := sql.Open("oracle", connString)
if err != nil {
return nil, err
}
Проблемный код:
query := `select tf.report_file, tf.report_name, tf.report_format from TRANSINV_EX_FILES tf where tf.guid = :1`
rows, err := s.db.QueryContext(ctx, query, id)
if err != nil {
return nil, fmt.Errorf("%s: getting additional files cdb: %w", op, err)
}
defer rows.Close()
for rows.Next() {
var (
reportFormat sql.NullString
reportName sql.NullString
data []byte // тут получается 32769, хотя блоб > 50000
)
err := rows.Scan(&data, &reportName, &reportFormat)
if err != nil {
return nil, fmt.Errorf("%s: getting additional files cdb: %w", op, err)
}
}
Ответы (1 шт):
Автор решения: BSW
→ Ссылка
Нужно использовать url option lob fetch = post
urlOptions := map[string]string{
"lob fetch": "post",
}
connString := go_ora.BuildUrl(cfg.Host, cfg.Port, cfg.DBName, cfg.Username, cfg.Password, urlOptions)
db, err := sql.Open("oracle", connString)