SQL iSeries - Récupération du user de verrouillage d'un enregistrement
Modifié par Julien EYMERY le 2015/08/31 11:09
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
- 11. Le nom de table NomTable
- Le RRN récupéré à l'étape 1
- Le RRN récupéré à l'étape 1
- en paramètres de sortie
- 11. Le profil utilisateur (user iSeries)
- Le nom du travail (job iSeries)
- 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
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
* 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)
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)