Objectif

 Dans un programme Adelia Visual, récupérer l'utilisateur (user) verrouillant un enregistrement de table en accès SQL iSeries.

Principe général

Étape 1

Récupérer le Relative Record Number (RRN) de l’enregistrement verrouillé par la requête type suivante :

select rrn(NomTable) into :ValeurRrn from NomTable where Condition

Où :

  • NomTable est la table sur laquelle a été détecté un verrouillage (*BLOQUE = ‘1’ ou SQLCODE = -913)
  • ValeurRrn est une variable définie en NUM_BIN_4
  • Condition est la condition de la requête de mise à jour ou de lecture émise sur NomTable

Étape 2

Appeler l'API IBM QDBRRCDL (avec le format RRCD0100)

Avec :

  • en paramètres d'entrée
    1. Le nom de table NomTable
    2. Le RRN récupéré à l'étape 1

 

  • en paramètres de sortie
    1. Le profil utilisateur (user iSeries)
    2. Le nom du travail (job iSeries)
    3. Le n° du travail

Exemple

Traitement général
* Requête SQL, récupération du RRN de l'enregistrement verrouillé
EXEC_SQL(select rrn(MATABLE) into :wrrn from MATABLE where IdCode = :WIdCode)

TRAITER_PROC RTVUSER 'MATABLE' wrrn wprofil wnomtrav wnumtrav

  

Procédure RTVUSER

 
Déclaration
*****************************************************************************
* Récupération informations sur le job verrouillant un enregistrement
* d'une table avec l'API QDBRRCDL
* Paramètres :
* - Nom table (E)
* - N° relatif d'enregistrement verrouillé (E)
* - Profil utilisateur (S) 
* - Nom job (S)
* - N° job (S)
*****************************************************************************
alpha(10) w_nom_pgm
alpha(500) w_rec_var 
num_bin_4 w_lg_rec_var
alpha(8) w_fmt_name
alpha(20) w_rcd_id_inf
alpha(10) w_mbr_name
alpha(30) w_err_code
num_bin_4 w_nb_rec_lck_av
num_bin_4 w_nb_rec__lck_ret
num_bin_4 w_depl_lst_rec_lck
num_bin_4 w_size_info
alpha(44) t_info_job(11)
alpha(44) w_info_job
alpha(10) p_job_name
alpha(10) p_usr_name
alpha(6) p_job_nbr
alpha(1) w_lock_status
alpha(1) w_lock_state
num_bin_4 w_rrn_out
num_bin_4 p_rrn_in
alpha(44) p_info_job
alpha(10) p_nom_table
dsi dsrecvar w_nb_rec_lck_av w_nb_rec__lck_ret w_depl_lst_rec_lck w_size_info t_info_job
dsi dsinfojob w_info_job p_job_name,1 p_usr_name,11 p_job_nbr,21 w_lock_status,27 w_lock_state,28 w_rrn_out,29

PARAM p_nom_table p_rrn_in p_usr_name p_job_name p_job_nbr 
Traitement
* Format API de récupération
w_fmt_name = 'RRCD0100'
* Appel de l'API
w_nom_pgm = 'QDBRRCDL'
w_lg_rec_var = 500
w_rcd_id_inf = p_nom_table // '*LIBL '
w_mbr_name = '*FIRST'

APPELER &w_nom_pgm w_rec_var w_lg_rec_var w_fmt_name w_rcd_id_inf w_mbr_name p_rrn_in w_err_code

dsrecvar = w_rec_var
w_info_job = t_info_job(1)