Pular para o conteúdo

Como usar procedures, packages e functions do Oracle com Python: um guia prático com exemplos de código

Como usar procedures, packages e functions do Oracle com Python: um guia prático com exemplos de código

O que são procedures, packages e functions do Oracle?

Procedures, packages e functions são objetos de banco de dados que permitem encapsular blocos de código PL/SQL (Procedural Language/Structured Query Language) para realizar tarefas específicas. Eles facilitam a reutilização, a manutenção e a organização do código, além de melhorar o desempenho e a segurança das aplicações.

  • Uma procedure é um subprograma que pode receber parâmetros de entrada e saída, mas não retorna um valor. Ela é usada para executar ações como inserir, atualizar ou deletar dados, ou chamar outras procedures ou functions.
  • Uma function é um subprograma que pode receber parâmetros de entrada, mas retorna um único valor. Ela é usada para calcular ou retornar informações, como o resultado de uma operação matemática, uma data ou uma string formatada.
  • Um package é uma coleção de procedures, functions, variáveis, constantes, tipos e cursores relacionados. Ele permite agrupar objetos que têm uma finalidade comum, facilitando o acesso e a documentação.

Como usar o Python para acessar o banco de dados Oracle?

Para usar o Python para acessar o banco de dados Oracle, é preciso instalar o módulo cx_Oracle, que é uma interface API (Application Programming Interface) que permite interagir com o banco de dados usando comandos SQL ou PL/SQL.

Para saber como fazer isso, CLIQUE AQUI e veja o meu artigo anterior.

Como executar procedures, packages e functions do Oracle usando o Python?

Para executar procedures, packages e functions do Oracle usando o Python, é preciso usar os métodos callproc(), callfunc() ou execute() do cursor. Esses métodos recebem o nome da procedure, package ou function e os parâmetros necessários como argumentos. Os parâmetros podem ser passados como uma lista ou um dicionário.

Para exemplificar, utilizarei o schema HR. Para saber como instalá-lo, veja o ARTIGO do Renato Sanchez explicando o processo.

Exemplos
# Executar uma procedure sem parâmetros
cur.callproc('TS_ODO.ODO_AUT_RCS_DIRECIONAMENTO.p_versao')

# Executar uma function que retorna uma string
versao = cur.callfunc('TS_ODO.ODO_AUT_RCS_DIRECIONAMENTO.p_versao', str)

# Executar uma procedure com parâmetros de entrada e saída
params = [1234, None] # O segundo parâmetro será preenchido pela procedure
cur.callproc('TS_ODO.ODO_AUT_RCS_DIRECIONAMENTO.p_direcionamento', params)
print(params[1]) # Imprimir o valor do segundo parâmetro

# Executar uma function que recebe um parâmetro de entrada e retorna um número
salario = cur.callfunc('HR.GET_EMPLOYEE_SALARY', float, [101])

# Executar um bloco anônimo PL/SQL que chama uma function dentro de um package
sql = """
BEGIN
  :result := HR.JOB_HISTORY_PKG.GET_JOB_HISTORY(:emp_id);
END;
"""
params = {'emp_id': 101, 'result': None} # O parâmetro result será preenchido pelo bloco PL/SQL
cur.execute(sql, params)
print(params['result']) # Imprimir o valor do parâmetro result
Exemplo completo para procedure
import cx_Oracle

# Criar uma conexão com o banco de dados Oracle
con = cx_Oracle.connect('pythonhol/welcome@127.0.0.1/orcl')

# Criar um cursor para executar comandos SQL
cur = con.cursor()

# Executar a procedure TS_ODO.ODO_AUT_RCS_DIRECIONAMENTO com três argumentos
cur.callproc('TS_ODO.ODO_AUT_RCS_DIRECIONAMENTO', [arg1, arg2, arg3])

# Fechar o cursor e a conexão
cur.close()
con.close()
Exemplo completo de function
import cx_Oracle

# Criar uma conexão com o banco de dados Oracle
con = cx_Oracle.connect('pythonhol/welcome@127.0.0.1/orcl')

# Criar um cursor para executar comandos SQL
cur = con.cursor()

# Executar a function TS_ODO.p_versao e armazenar o resultado em uma variável
result = cur.callfunc('TS_ODO.p_versao', cx_Oracle.STRING)

# Imprimir o resultado
print(result)

# Fechar o cursor e a conexão
cur.close()
con.close()
Exemplo completo de package
import cx_Oracle

# Criar uma conexão com o banco de dados Oracle
con = cx_Oracle.connect('pythonhol/welcome@127.0.0.1/orcl')

# Criar um cursor para executar comandos SQL
cur = con.cursor()

# Executar a procedure HR.ADD_JOB_HISTORY com quatro argumentos
cur.callproc('HR.JOB_HISTORY_PKG.ADD_JOB_HISTORY', [emp_id, start_date, end_date, job_id])

# Fechar o cursor e a conexão
cur.close()
con.close()

Conclusão

Neste artigo, eu mostrei como usar procedures, packages e functions do Oracle através do Python, usando o módulo cx_Oracle para conectar e interagir com o banco de dados. Esses objetos permitem encapsular blocos de código PL/SQL para realizar tarefas específicas, facilitando a reutilização, a manutenção e a organização do código. Espero que este artigo tenha sido útil e que você possa aplicar esses conceitos e funcionalidades em seus projetos.

Abs

Referências

Giovano Silva

Giovano Silva

Giovano Silva é um profissional com mais de 10 anos de experiência em tecnologias Oracle, com ênfase em PL/SQL. Ele adora escrever sobre soluções para problemas comuns enfrentados por profissionais Oracle em seu dia a dia. Seu objetivo é compartilhar conhecimento, simplificar conceitos complexos e ajudar a comunidade Oracle a crescer coletivamente.

Deixe um comentário

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

Marcações:
plugins premium WordPress