Pular para o conteúdo

Como acessar o banco de dados Oracle com o Golang

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:

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

Quão útil foi este post ?

Clique em uma estrela para classificar o post

nota média 4.9 / 5. Contagem de votos: 10

Sem votos ! Seja o primeiro a classificar !

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress