Como acessar o banco de dados Oracle com o Golang
Neste artigo, vamos aprender como usar o Golang, uma linguagem de programação moderna e eficiente, para se conectar e interagir com o Oracle Database, um dos sistemas de gerenciamento de banco de dados mais populares e robustos do mercado. Para isso, vamos usar as seguintes ferramentas:
- Golang: uma linguagem de programação compilada, concorrente, imperativa, estruturada, orientada a objetos e com suporte a reflexão. Você pode baixar e instalar o Golang no seu sistema operacional seguindo as instruções oficiais: https://golang.org/doc/install
- Oracle Instant Client: uma ferramenta gratuita que fornece as bibliotecas necessárias para se conectar ao Oracle Database. Você pode baixar e instalar o Oracle Instant Client no seu sistema operacional seguindo as instruções oficiais: https://www.oracle.com/br/database/technologies/instant-client.html
- go-ora: um driver que implementa o Oracle Call Interface (OCI) em Golang. Você pode baixar e instalar o go-ora no seu ambiente Golang seguindo as instruções oficiais: https://github.com/sijms/go-ora
Para a criação da massa de dados utilizada em nosso exemplo, execute os scripts abaixo:
-- Criar a tabela emp
create table emp (
empno number(4) not null primary key,
ename varchar2(10),
job varchar2(9),
mgr number(4),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number(2)
);
-- Inserir os dados na tabela emp
insert into emp values (7369, 'SMITH', 'CLERK', 7902, date '1980-12-17', 800, null, 20);
insert into emp values (7499, 'ALLEN', 'SALESMAN', 7698, date '1981-02-20', 1600, 300, 30);
insert into emp values (7521, 'WARD', 'SALESMAN', 7698, date '1981-02-22', 1250, 500, 30);
insert into emp values (7566, 'JONES', 'MANAGER', 7839, date '1981-04-02', 2975, null, 20);
insert into emp values (7654, 'MARTIN', 'SALESMAN', 7698, date '1981-09-28', 1250, 1400, 30);
insert into emp values (7698, 'BLAKE', 'MANAGER', 7839, date '1981-05-01', 2850, null, 30);
insert into emp values (7782, 'CLARK', 'MANAGER', 7839, date '1981-06-09', 2450, null, 10);
insert into emp values (7788, 'SCOTT', 'ANALYST', 7566, date '1987-04-19', 3000, null, 20);
insert into emp values (7839, 'KING', 'PRESIDENT', null, date '1981-11-17', 5000, null, 10);
insert into emp values (7844, 'TURNER', 'SALESMAN', 7698, date '1981-09-08', 1500, null ,30);
insert into emp values (7876, 'ADAMS', 'CLERK', 7788, date '1987-05-23', 1100, null ,20);
insert into emp values (7900, 'JAMES', 'CLERK', 7698, date '1981-12-03', 950 ,null ,30);
insert into emp values (7902, 'FORD' , 'ANALYST' ,7566 ,date'1981-12-03' ,3000 ,null ,20);
insert into emp values (7934 ,'MILLER' ,'CLERK' ,7782 ,date'1982-01-23' ,1300 ,null ,10);
-- Criar a tabela dept
create table dept (
deptno number(2) not null primary key,
dname varchar2(14),
loc varchar2(13)
);
-- Inserir os dados na tabela dept
insert into dept values (10,'ACCOUNTING','NEW YORK');
insert into dept values (20,'RESEARCH','DALLAS');
insert into dept values (30,'SALES','CHICAGO');
insert into dept values (40,'OPERATIONS','BOSTON');
Passo a passo
Depois de instalar as ferramentas necessárias, vamos seguir os seguintes passos para criar um programa em Golang que se conecta ao Oracle Database e executa uma consulta SQL simples.
Aqui estão alguns passos que você pode seguir:
- Instale o Golang no seu sistema operacional seguindo as instruções oficiais: https://golang.org/doc/install
- Instale o Oracle Instant Client, que é uma ferramenta gratuita que fornece as bibliotecas necessárias para se conectar ao Oracle Database: https://www.oracle.com/br/database/technologies/instant-client.html
- Instale o driver go-ora, que é uma implementação do Oracle Call Interface (OCI) em Golang: https://github.com/sijms/go-ora
- Crie um arquivo .go com o seguinte código de exemplo, adaptando os valores de usuário, senha, host, porta e serviço para o seu caso:
package main
import (
"database/sql"
"fmt"
"log"
"github.com/sijms/go-ora/v2"
)
func main() {
// Criar uma string de conexão no formato user/password@host:port/service_name
connString := "scott/tiger@localhost:1521/orclpdb1"
// Abrir uma conexão com o banco de dados usando o driver go-ora
db, err := sql.Open("oracle", connString)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Testar a conexão com um ping
err = db.Ping()
if err != nil {
log.Fatal(err)
}
fmt.Println("Conexão bem sucedida!")
// Executar uma consulta SQL e imprimir os resultados
rows, err := db.Query("select * from emp")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
// Obter os nomes das colunas da consulta
columns, err := rows.Columns()
if err != nil {
log.Fatal(err)
}
fmt.Println("Colunas:", columns)
// Iterar sobre as linhas da consulta e imprimir os valores
for rows.Next() {
// Criar um slice de interface{} para armazenar os valores das colunas
values := make([]interface{}, len(columns))
for i := range values {
values[i] = new(go_ora.OracleString)
}
// Escanear os valores das colunas para o slice de interface{}
err = rows.Scan(values...)
if err != nil {
log.Fatal(err)
}
// Imprimir os valores das colunas formatados como string
for i, v := range values {
fmt.Printf("%s: %s\n", columns[i], v.(*go_ora.OracleString).StringVal)
}
fmt.Println()
}
}
Execute o arquivo .go com o comando go run
e verifique a saída no terminal.
Para executar esse script, usando o go run, você precisa informar o nome do arquivo .go que contém o código. Por exemplo, se o seu arquivo se chama oracle.go, você pode executar o seguinte comando no terminal:
go run oracle.go
Isso vai compilar e executar o seu código, mostrando a saída no terminal. Se você quiser apenas compilar o seu código, sem executá-lo, você pode usar o comando go build
em vez de go run
. Isso vai gerar um arquivo executável com o mesmo nome do seu arquivo .go, mas sem a extensão. Por exemplo, se o seu arquivo se chama oracle.go, você pode executar o seguinte comando no terminal:
go build oracle.go
Isso vai gerar um arquivo chamado oracle (ou oracle.exe, se você estiver usando Windows) que você pode executar diretamente no terminal. Por exemplo:
./oracle
ou
oracle.exe
Após a execução, você deve ver algo parecido com isso:
Conexão bem sucedida!
Colunas: [EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO]
EMPNO: 7369
ENAME: SMITH
JOB: CLERK
MGR: 7902
HIREDATE: 17-DEC-80
SAL: 800
COMM:
DEPTNO: 20
EMPNO: 7499
ENAME: ALLEN
JOB: SALESMAN
MGR: 7698
HIREDATE: 20-FEB-81
SAL: 1600
COMM: 300
DEPTNO: 30
...
Conclusão
Neste artigo, vimos como usar o Golang para se conectar e interagir com o Oracle Database, usando as ferramentas Golang, Oracle Instant Client e go-ora. Com esse conhecimento, você pode criar aplicações em Golang que aproveitam os recursos e a performance do Oracle Database.
Abs
Referências
- https://dev.to/hotkratos/golang-oracle-db-example-43pp
- https://www.oracletutorial.com/
- https://aprendagolang.com.br/category/banco-de-dados/