Está en la página 1de 14

Universidad Autónoma de Chihuahua:

Facultad de Ingeniería

BASES DE DATOS AVANZADA

“Proyecto: Aplicación PL/SQL en python”

Armando Chávez Pérez – 316099


M.A. José Saúl De Lira Miramontes
7CC2
16/03/2022
Introducción

Para este proyecto se creó una aplicación en el lenguaje de programación python


capaz de acceder a una base de datos Oracle y ejecutar métodos para modificar y
acceder a información de dicha base de datos.

Desarrollo

Gracias a la librería “cx_Oracle” pudimos hacer una conexión con la base de datos
SCOTT a través de un script de python. Esta conexión nos permite ejecutar
funciones y procesos previamente almacenados en la base de datos.

La aplicación se ejecuta en una CLI y al iniciar esta nos muestra un menú con las
acciones que podemos realizar. Estas acciones son:

 Añadir un registro a la tabla DEPT.


 Eliminar un registro de la tabla DEPT.
 Actualizar un registro de la tabla DEPT.
 Añadir un registro a la tabla EMP.
 Eliminar un registro de la tabla EMP.
 Actualizar un registro de la tabla EMP.
 Contar la cantidad de empleados en un departamento.

Código

import cx_Oracle

#Diccionario de las opciones


menu_opciones = {
    1: 'Añadir un registro a la tabla DEPT',
    2: 'Eliminar un registro de la tabla DEPT',
    3: 'Actualizar un registro de la tabla DEPT',
    4: 'Añadir un registro a la tabla EMP',
    5: 'Eliminar un registro de la tabla EMP',
    6: 'Actualizar un registro de la tabla EMP',
    7: 'Contar la cantidad de empleados en un departamento',
    9: 'SALIR',
}

#Funcion menu
def print_menu():
    print('------------------MENU--------------------')
    for key in menu_opciones.keys():
        print (key, '--', menu_opciones[key] )

# Aqui va todo lo de Add_depto()


def call_add_depto():
    print('Esta es la funcion para AGREGAR informacion a la tabla de
DEPARTAMENTOS')
    #Conexion con la base de datos
    conn = cx_Oracle.connect('scott/tiger@//localhost:1521/xe')
    print(conn.version + ' Conexion exitosa')

    try:
        #Creamos las variables para almacenar los datos que le pasaremos al
procedimiento
        num = int(input("Ingrese el numero del departamento a ser insertado:
"))
        nomb = input('Ingrese el nombre del departamento a ser insertado: ')
        loc = input('Ingrese la ubicacion del departamento a ser insertado:
')

        #Se crea el cursor


        cur = conn.cursor()
        cur.callproc('Add_depto', (num,nomb,loc)) #int, string, string

    except Exception as err:


        print('Hubo un error en la execucion del proceso', err)
    else:
        print("El proceso se realizo con exito")
    finally:
        cur.close()
        conn.close()

   
# Aqui va todo lo de Update_depto()
def call_update_depto():
    print('Esta es la funcion para ACTUALIZAR informacion a la tabla de
DEPARTAMENTOS')
    #Conexion con la base de datos
    conn = cx_Oracle.connect('scott/tiger@//localhost:1521/xe')
    print(conn.version + ' Conexion exitosa')

    try:
        #Creamos las variables para almacenar los datos que le pasaremos al
procedimiento
        num = int(input("Ingrese el numero del departamento a ser
modificado: "))
        nomb = input('Ingrese el nuevo nombre del departamento: ')
        loc = input('Ingrese la nueva ubicacion del departamento: ')

        #Se crea el cursor


        cur = conn.cursor()
        cur.callproc('Update_depto', (num,nomb,loc)) #int, string, string

    except Exception as err:


        print('Hubo un error en la execucion del proceso', err)
    else:
        print("El proceso se realizo con exito")
    finally:
        cur.close()
        conn.close()

# Aqui va todo lo de Delete_depto()


def call_delete_depto():
    print('Esta es la funcion para ELIMINAR informacion a la tabla de
DEPARTAMENTOS')
   
    #Conexion con la base de datos
    conn = cx_Oracle.connect('scott/tiger@//localhost:1521/xe')
    print(conn.version + ' Conexion exitosa')

    try:
        num = int(input('Ingrese el numero del departamento que desea
eliminar: '))
        #Se crea el cursor
        cur = conn.cursor()
        cur.callproc('DELETE_DEPTO', (num,))

    except Exception as err:


        print('Hubo un error en la execucion del proceso', err)
    else:
        print("El proceso se realizo con exito")
    finally:
        cur.close()
        conn.close()

# Aqui va todo lo de Add_emp()


def call_add_emp():
    print('Esta es la funcion para AGREGAR informacion a la tabla de
EMPLEADOS')
   
    #Conexion con la base de datos
    conn = cx_Oracle.connect('scott/tiger@//localhost:1521/xe')
    print(conn.version + ' Conexion exitosa')

    try:
        #Creamos las variables para almacenar los datos que le pasaremos al
procedimiento
        num = int(input("Ingrese el numero del nuevo empleado: "))
        nomb = input('Ingrese el nombre del nuevo empleado: ')
        job = input('Ingrese el trabajo del nuevo empleado: ')
        mgr = int(input("Ingrese el numero del gerente del nuevo empleado:
"))
        date = input('Ingrese la fecha de contratacion del nuevo empleado:
')
        sal = int(input("Ingrese el salario del nuevo empleado: "))
        comm = int(input("Ingrese la comision del nuevo empleado: "))
        depno = int(input("Ingrese el numero del departamento del nuevo
empleado: "))

        #Se crea el cursor


        cur = conn.cursor()
        cur.callproc('Add_emp', (num,nomb,job,mgr,date,sal,comm,depno))
#int, string, string

    except Exception as err:


        print('Hubo un error en la execucion del proceso', err)
    else:
        print("El proceso se realizo con exito")
    finally:
        cur.close()
        conn.close()

# Aqui va todo lo de Delete_emp()


def call_delete_emp():
    print('Esta es la funcion para ELIMINAR informacion a la tabla de
EMPLEADOS')
    #Conexion con la base de datos
    conn = cx_Oracle.connect('scott/tiger@//localhost:1521/xe')
    print(conn.version + ' Conexion exitosa')

    try:
        num = int(input('Ingrese el numero del empleado que desea eliminar:
'))
        #Se crea el cursor
        cur = conn.cursor()
        cur.callproc('DELETE_emp', (num,))

    except Exception as err:


        print('Hubo un error en la execucion del proceso', err)
    else:
        print("El proceso se realizo con exito")
    finally:
        cur.close()
        conn.close()

# Aqui va todo lo de Update_emp()


def call_update_emp():
    print('Esta es la funcion para ACTUALIZAR informacion a la tabla de
EMPLEADOS')
   
    #Conexion con la base de datos
    conn = cx_Oracle.connect('scott/tiger@//localhost:1521/xe')
    print(conn.version + ' Conexion exitosa')

    try:
        #Creamos las variables para almacenar los datos que le pasaremos al
procedimiento
        num = int(input("Ingrese el numero del empleado cuyos datos seran
actualizados: "))
        nomb = input('Ingrese el nuevo nombre del empleado: ')
        job = input('Ingrese el nuevo trabajo del empleado: ')
        mgr = int(input("Ingrese el nuevo  numero del gerente del empleado:
"))
        date = input('Ingrese la nueva fecha de contratacion del empleado:
')
        sal = int(input("Ingrese el nuevo salario del empleado: "))
        comm = int(input("Ingrese la nueva comision del empleado: "))
        depno = int(input("Ingrese el nuevo numero del departamento del
empleado: "))

        #Se crea el cursor


        cur = conn.cursor()
        cur.callproc('Update_emp', (num,nomb,job,mgr,date,sal,comm,depno))
#int, string, string

    except Exception as err:


        print('Hubo un error en la execucion del proceso', err)
    else:
        print("El proceso se realizo con exito")
    finally:
        cur.close()
        conn.close()

# Aqui va todo lo de noEmp_depto()


def call_noemp_depto():
    print('Esta funcion cuenta cuantos empleados laboran en un
departamento')
    #Conexion con la base de datos
    conn = cx_Oracle.connect('scott/tiger@//localhost:1521/xe')
    print(conn.version + ' Conexion exitosa')

    try:
        num_dept = int(input("Ingrese el numero del departamento del cual
desea conocer la cantidad de empleados que laboran en el: "))
        #Se crea el cursor
        data = [num_dept]
        cur = conn.cursor()
        resultado = cur.callfunc('noEmp_depto', int, data)

    except Exception as err:


        print('Hubo un error en la execucion del proceso', err)
    else:
        print("El proceso se realizo con exito")
        print('El departamento ' + str(num_dept) + ' tiene ' +
str(resultado) + ' empleados.')
    finally:
        cur.close()
        conn.close()
#Inicia el ciclo que despliega el menu de las opciones
if __name__=='__main__':
    while(True):
        print_menu()
        opcion = ''
        try:
            opcion = int(input('Ingrese el numero de la opcion que desea
elegir: '))
        except:
            print('Valor inesperado. Por favor ingrese un numero...')
        #if - else if para llamar a la funcion correspondiente
        if opcion == 1:
           call_add_depto()
        elif opcion == 2:
            call_delete_depto()
        elif opcion == 3:
            call_update_depto()
        elif opcion == 4:
            call_add_emp()
        elif opcion == 5:
            call_delete_emp()
        elif opcion == 6:
            call_update_emp()
        elif opcion == 7:
            call_noemp_depto()
        elif opcion == 9:
            print('La aplicacion fue terminada exitosamente')
            exit()
        else:
            print('Opcion invalida. Por favor ingrese un numero del 1 al
9.')
Resultados

 Add_depto()

Salida de la consola.

Comprobación en la base de datos

 Update_depto()

Salida de la consola.
Comprobación en la base de datos.

 Delete_depto()

Salida de la consola.

Comprobación en la base de datos.


 Add_emp()

Salida de la consola.

Comprobación en la base de datos.


 Update_emp()

Salida de la consola.

Comprobación en la base de datos.


 Delete_emp()

Salida de la consola.

Comprobación en la base de datos.


 noEmp_depto()

Salida de la consola.

Conclusiones

Las operaciones PL/SQL son una gran herramienta que nos permite manipular y
editar información con gran eficiencia. Al combinar el poder de esta herramienta
con la versatilidad de un lenguaje de programación como python, podemos crear
aplicaciones de todo tipo que nos permitan interactuar con la base de datos de
una manera eficaz y sencilla.

También podría gustarte