Селект блобов из 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)


→ Ссылка