En aquest tema, aprendrem com interactuar amb bases de dades utilitzant REXX. Això inclou la connexió a una base de dades, l'execució de consultes SQL, la manipulació de dades i la gestió d'errors. Aquest coneixement és essencial per desenvolupar aplicacions que necessiten emmagatzemar i recuperar dades de manera eficient.

Objectius del Tema

  • Entendre com connectar-se a una base de dades des de REXX.
  • Aprendre a executar consultes SQL.
  • Manipular dades de la base de dades.
  • Gestionar errors durant les operacions de base de dades.

  1. Connexió a una Base de Dades

1.1. Configuració de l'Entorn

Abans de començar, assegura't que tens instal·lats els controladors necessaris per a la base de dades amb la qual treballaràs (per exemple, DB2, MySQL, etc.). També necessitaràs les credencials d'accés a la base de dades.

1.2. Exemple de Connexió

A continuació, es mostra un exemple de com connectar-se a una base de dades DB2 utilitzant REXX:

/* Connexió a una base de dades DB2 */
ADDRESS TSO "SUBCOM DSNREXX LOAD"
ADDRESS DSNREXX "CONNECT" "DSN" "USER(username)" "USING(password)"

IF SQLCODE \= 0 THEN
  SAY "Connexió a la base de dades fallida. SQLCODE:" SQLCODE
ELSE
  SAY "Connexió a la base de dades reeixida."

Explicació del Codi:

  • ADDRESS TSO "SUBCOM DSNREXX LOAD": Carrega el subcomandament DSNREXX.
  • ADDRESS DSNREXX "CONNECT" "DSN" "USER(username)" "USING(password)": Intenta connectar-se a la base de dades amb les credencials proporcionades.
  • IF SQLCODE \= 0 THEN: Comprova si la connexió ha estat reeixida (SQLCODE és 0 si la connexió és reeixida).

  1. Execució de Consultes SQL

2.1. Consultes SELECT

Per recuperar dades d'una base de dades, utilitzem la instrucció SELECT. A continuació es mostra un exemple:

/* Executar una consulta SELECT */
ADDRESS DSNREXX "EXECSQL DECLARE C1 CURSOR FOR S1"
ADDRESS DSNREXX "EXECSQL PREPARE S1 INTO :SQLSTMT FROM :QUERY"
ADDRESS DSNREXX "EXECSQL OPEN C1"

DO WHILE SQLCODE = 0
  ADDRESS DSNREXX "EXECSQL FETCH C1 INTO :RESULT"
  IF SQLCODE = 0 THEN
    SAY "Resultat: " RESULT
END

ADDRESS DSNREXX "EXECSQL CLOSE C1"

Explicació del Codi:

  • DECLARE C1 CURSOR FOR S1: Declara un cursor per a la consulta.
  • PREPARE S1 INTO :SQLSTMT FROM :QUERY: Prepara la consulta SQL.
  • OPEN C1: Obre el cursor.
  • FETCH C1 INTO :RESULT: Recupera les files una per una.
  • CLOSE C1: Tanca el cursor.

2.2. Consultes INSERT, UPDATE, DELETE

Per modificar dades, utilitzem les instruccions INSERT, UPDATE i DELETE. A continuació es mostra un exemple d'inserció:

/* Executar una consulta INSERT */
ADDRESS DSNREXX "EXECSQL INSERT INTO my_table (col1, col2) VALUES ('value1', 'value2')"

IF SQLCODE \= 0 THEN
  SAY "Inserció fallida. SQLCODE:" SQLCODE
ELSE
  SAY "Inserció reeixida."

Explicació del Codi:

  • INSERT INTO my_table (col1, col2) VALUES ('value1', 'value2'): Insereix una nova fila a la taula my_table.

  1. Manipulació de Dades

3.1. Exemple de Manipulació

A continuació es mostra un exemple complet que combina la connexió, la consulta i la manipulació de dades:

/* Connexió a la base de dades */
ADDRESS TSO "SUBCOM DSNREXX LOAD"
ADDRESS DSNREXX "CONNECT" "DSN" "USER(username)" "USING(password)"

IF SQLCODE \= 0 THEN
  SAY "Connexió a la base de dades fallida. SQLCODE:" SQLCODE
ELSE DO
  SAY "Connexió a la base de dades reeixida."

  /* Executar una consulta SELECT */
  QUERY = "SELECT col1, col2 FROM my_table"
  ADDRESS DSNREXX "EXECSQL DECLARE C1 CURSOR FOR S1"
  ADDRESS DSNREXX "EXECSQL PREPARE S1 INTO :SQLSTMT FROM :QUERY"
  ADDRESS DSNREXX "EXECSQL OPEN C1"

  DO WHILE SQLCODE = 0
    ADDRESS DSNREXX "EXECSQL FETCH C1 INTO :RESULT"
    IF SQLCODE = 0 THEN
      SAY "Resultat: " RESULT
  END

  ADDRESS DSNREXX "EXECSQL CLOSE C1"

  /* Executar una consulta INSERT */
  ADDRESS DSNREXX "EXECSQL INSERT INTO my_table (col1, col2) VALUES ('value1', 'value2')"

  IF SQLCODE \= 0 THEN
    SAY "Inserció fallida. SQLCODE:" SQLCODE
  ELSE
    SAY "Inserció reeixida."

  /* Tancar la connexió */
  ADDRESS DSNREXX "DISCONNECT"
END

  1. Gestió d'Errors

4.1. Exemple de Gestió d'Errors

És important gestionar els errors adequadament per assegurar la robustesa de l'aplicació. A continuació es mostra un exemple de com gestionar errors:

/* Connexió a la base de dades */
ADDRESS TSO "SUBCOM DSNREXX LOAD"
ADDRESS DSNREXX "CONNECT" "DSN" "USER(username)" "USING(password)"

IF SQLCODE \= 0 THEN
  SAY "Connexió a la base de dades fallida. SQLCODE:" SQLCODE
ELSE DO
  SAY "Connexió a la base de dades reeixida."

  /* Intentar executar una consulta */
  ADDRESS DSNREXX "EXECSQL SELECT col1 FROM my_table WHERE col2 = 'value'"

  IF SQLCODE \= 0 THEN
    SAY "Consulta fallida. SQLCODE:" SQLCODE
  ELSE
    SAY "Consulta reeixida. Resultat: " RESULT

  /* Tancar la connexió */
  ADDRESS DSNREXX "DISCONNECT"
END

Exercicis Pràctics

Exercici 1: Connexió i Consulta

  1. Connecta't a una base de dades de prova.
  2. Executa una consulta SELECT per recuperar totes les files d'una taula.
  3. Mostra els resultats a la consola.

Exercici 2: Inserció de Dades

  1. Connecta't a una base de dades de prova.
  2. Insereix una nova fila en una taula.
  3. Verifica que la fila ha estat inserida correctament executant una consulta SELECT.

Exercici 3: Gestió d'Errors

  1. Connecta't a una base de dades de prova.
  2. Intenta executar una consulta amb un error intencionat (per exemple, una taula que no existeix).
  3. Gestiona l'error i mostra un missatge adequat a la consola.

Solucions

Solució a l'Exercici 1

/* Connexió a la base de dades */
ADDRESS TSO "SUBCOM DSNREXX LOAD"
ADDRESS DSNREXX "CONNECT" "DSN" "USER(username)" "USING(password)"

IF SQLCODE \= 0 THEN
  SAY "Connexió a la base de dades fallida. SQLCODE:" SQLCODE
ELSE DO
  SAY "Connexió a la base de dades reeixida."

  /* Executar una consulta SELECT */
  QUERY = "SELECT * FROM test_table"
  ADDRESS DSNREXX "EXECSQL DECLARE C1 CURSOR FOR S1"
  ADDRESS DSNREXX "EXECSQL PREPARE S1 INTO :SQLSTMT FROM :QUERY"
  ADDRESS DSNREXX "EXECSQL OPEN C1"

  DO WHILE SQLCODE = 0
    ADDRESS DSNREXX "EXECSQL FETCH C1 INTO :RESULT"
    IF SQLCODE = 0 THEN
      SAY "Resultat: " RESULT
  END

  ADDRESS DSNREXX "EXECSQL CLOSE C1"
  ADDRESS DSNREXX "DISCONNECT"
END

Solució a l'Exercici 2

/* Connexió a la base de dades */
ADDRESS TSO "SUBCOM DSNREXX LOAD"
ADDRESS DSNREXX "CONNECT" "DSN" "USER(username)" "USING(password)"

IF SQLCODE \= 0 THEN
  SAY "Connexió a la base de dades fallida. SQLCODE:" SQLCODE
ELSE DO
  SAY "Connexió a la base de dades reeixida."

  /* Executar una consulta INSERT */
  ADDRESS DSNREXX "EXECSQL INSERT INTO test_table (col1, col2) VALUES ('value1', 'value2')"

  IF SQLCODE \= 0 THEN
    SAY "Inserció fallida. SQLCODE:" SQLCODE
  ELSE
    SAY "Inserció reeixida."

  /* Verificar la inserció */
  QUERY = "SELECT * FROM test_table WHERE col1 = 'value1'"
  ADDRESS DSNREXX "EXECSQL DECLARE C1 CURSOR FOR S1"
  ADDRESS DSNREXX "EXECSQL PREPARE S1 INTO :SQLSTMT FROM :QUERY"
  ADDRESS DSNREXX "EXECSQL OPEN C1"

  DO WHILE SQLCODE = 0
    ADDRESS DSNREXX "EXECSQL FETCH C1 INTO :RESULT"
    IF SQLCODE = 0 THEN
      SAY "Resultat: " RESULT
  END

  ADDRESS DSNREXX "EXECSQL CLOSE C1"
  ADDRESS DSNREXX "DISCONNECT"
END

Solució a l'Exercici 3

/* Connexió a la base de dades */
ADDRESS TSO "SUBCOM DSNREXX LOAD"
ADDRESS DSNREXX "CONNECT" "DSN" "USER(username)" "USING(password)"

IF SQLCODE \= 0 THEN
  SAY "Connexió a la base de dades fallida. SQLCODE:" SQLCODE
ELSE DO
  SAY "Connexió a la base de dades reeixida."

  /* Intentar executar una consulta amb error */
  ADDRESS DSNREXX "EXECSQL SELECT * FROM non_existent_table"

  IF SQLCODE \= 0 THEN
    SAY "Consulta fallida. SQLCODE:" SQLCODE
  ELSE
    SAY "Consulta reeixida. Resultat: " RESULT

  /* Tancar la connexió */
  ADDRESS DSNREXX "DISCONNECT"
END

Conclusió

En aquest tema, hem après com connectar-nos a una base de dades, executar consultes SQL, manipular dades i gestionar errors utilitzant REXX. Aquestes habilitats són fonamentals per desenvolupar aplicacions que necessiten interactuar amb bases de dades. Practica els exercicis proporcionats per consolidar els teus coneixements i estar preparat per a projectes més avançats.

© Copyright 2024. Tots els drets reservats