Closed fitlcarlos closed 4 months ago
where is \\
character in sql?
by the way I make an example
package main
import (
"database/sql"
"fmt"
go_ora "github.com/sijms/go-ora/v2"
"os"
)
func main() {
config, err := go_ora.ParseConfig(os.Getenv("DSN"))
if err != nil {
fmt.Println("can't parse config:", err)
return
}
go_ora.RegisterConnConfig(config)
db, err := sql.Open("oracle", "")
if err != nil {
fmt.Println("can't open db:", err)
return
}
defer func() {
err = db.Close()
if err != nil {
fmt.Println("can't close db:", err)
}
}()
var result string
_, err = db.Exec("BEGIN SELECT 'test_' || '' || 'test' into :id from dual; END;", go_ora.Out{Dest: &result, Size: 50})
if err != nil {
fmt.Println("can't execute query:", err)
return
}
fmt.Println("result: ", result)
}
output:
result: test_test
I also test it with \\
between ''
and same result
package main
import (
"database/sql"
"fmt"
go_ora "github.com/sijms/go-ora/v2"
"os"
)
func main() {
config, err := go_ora.ParseConfig(os.Getenv("DSN"))
if err != nil {
fmt.Println("can't parse config:", err)
return
}
go_ora.RegisterConnConfig(config)
db, err := sql.Open("oracle", "")
if err != nil {
fmt.Println("can't open db:", err)
return
}
defer func() {
err = db.Close()
if err != nil {
fmt.Println("can't close db:", err)
}
}()
var result string
_, err = db.Exec(`BEGIN SELECT 'test_' || '\' || 'test' into :id from dual; END;`, go_ora.Out{Dest: &result, Size: 50})
if err != nil {
fmt.Println("can't execute query:", err)
return
}
fmt.Println("result: ", result)
}
no error
The error is not occurring because you are concatenating two strings with the slash in a from dual.
Test using the HR.DEPARTMENTS table with a Where for the department_id column.
package main
import (
"database/sql"
"fmt"
go_ora "github.com/sijms/go-ora/v2"
)
func main() {
config, err := go_ora.ParseConfig("oracle://nbsgm:new@100.0.65.225:1521/nbs1")
if err != nil {
fmt.Println("can't parse config:", err)
return
}
go_ora.RegisterConnConfig(config)
db, err := sql.Open("oracle", "")
if err != nil {
fmt.Println("can't open db:", err)
return
}
defer func() {
err = db.Close()
if err != nil {
fmt.Println("can't close db:", err)
}
}()
var rows *sql.Rows
rows, err = db.Query(`SELECT department_name || '\' || department_name FROM HR.DEPARTMENTS where department_id = :department_id`, sql.Named("department_id", 10))
if err != nil {
fmt.Println("can't execute query:", err)
return
}
var desc sql.NullString
for rows.Next() {
err = rows.Scan(&desc)
}
fmt.Println("Process: ", desc)
}
Error:
go_build_test_go_ora.exe -- API server listening at: 127.0.0.1:54387 can't execute query: ORA-01008: not all variables bound
Debugger finished with the exit code 0
Fixed: utils.refineSqlText - Removed the increment from the form index if the character is '\', as it is removing a single quote when the query has a concatenation of texts with a slash, leaving the skip equal to true for the rest of the query.
The error caused when the query has parameters.
Example: SELECT ID, DESCRIPTION||'\'||DESCRIPTION FROM FAB_PROCESSO WHERE ID = :ID
Error: ORA-01008: not all variables bound