func insertClob(t *testing.T, conn *sql.Tx, text string) bool { qry := "INSERT INTO " + tbl + ` (F_int, F_clob) VALUES (-2, EMPTY_CLOB())` if _, err := conn.Exec(qry); err != nil { t.Errorf("cannot insert into "+tbl+" (%q): %v", qry, err) return false } var clob *oracle.ExternalLobVar qry = "SELECT F_clob FROM " + tbl + " WHERE F_int = -2 AND ROWNUM < 2" if err := conn.QueryRow(qry).Scan(&clob); err != nil { t.Errorf("cannot select empty clob: %v", err) return false } t.Logf("clob=%v", clob) if n, err := clob.WriteAt([]byte(text), 0); err != nil { t.Errorf("WriteAt clob: %v", err) } else if n != len([]rune(text)) { t.Errorf("written %d chars, awaited %d", n, len([]rune(text))) } else { t.Logf("written %d chars", n) } clob.Close() if err := conn.QueryRow(qry).Scan(&clob); err != nil { t.Errorf("cannot select clob: %v", err) return false } t.Logf("clob=%v", clob) defer clob.Close() got, err := clob.ReadAll() if err != nil { t.Errorf("reading clob: %v", err) return false } if string(got) != text { t.Errorf("got %q, awaited %q", got, text) return false } return true }