Reserva un objeto (y todos sus hijos) para que solo la sesión actual del cliente pueda actualizarlo. Impide que otra sesión reserve un objeto (y todos sus padres) de forma exclusiva si se especifica checkOutType=Shared.
| Parámetro | Descripción |
|---|---|
| checkoutParent | Indica si se debe reservar el objeto padre si el objeto especificado no existe. El valor predeterminado es FALSE. |
| checkOutType | Especifica el tipo de reserva. Por defecto, una reserva es 'EXCLUSIVE', por lo que solo la sesión actual puede actualizar el objeto especificado (y sus hijos). Si especifica 'SHARED', la reserva no bloquea el objeto; simplemente impide que otras sesiones bloqueen el objeto (y sus padres). |
| ObjectSelector | Especifica el tipo y los identificadores del objeto que se desea reservar. |
| objType | Dentro de ObjectSelector, especifica el tipo de objeto. Puede ser 'ACTION', 'ACTIONSET', 'CASLIB', 'COLUMN' o 'TABLE'. |
| action | Cuando objType es 'ACTION', especifica el nombre de la acción. |
| actionSet | Cuando objType es 'ACTION' o 'ACTIONSET', especifica el nombre del conjunto de acciones. |
| caslib | Cuando objType es 'CASLIB', 'TABLE' o 'COLUMN', especifica el nombre del caslib. |
| table | Cuando objType es 'TABLE' o 'COLUMN', especifica el nombre de la tabla. |
| column | Cuando objType es 'COLUMN', especifica el nombre de la columna. |
Para poder probar la acción 'checkOutObject', primero creamos una tabla de ejemplo llamada 'CARS' en la caslib 'CASUSER' a partir de la tabla de ayuda 'SASHELP.CARS'. Esta tabla servirá como el objeto a reservar en los ejemplos.
| 1 | DATA casuser.cars; SET sashelp.cars; RUN; |
Este ejemplo inicia una transacción y realiza una reserva exclusiva en la tabla 'CARS'. Una vez ejecutado, ninguna otra sesión podrá modificar la tabla 'CARS' hasta que la transacción actual se confirme o se revierta.
| 1 | |
| 2 | PROC CAS; |
| 3 | ACCESSCONTROL.checkOutObject / objectSelector={objType='TABLE', caslib='CASUSER', TABLE='CARS'}, checkOutType='EXCLUSIVE'; |
| 4 | |
| 5 | RUN; |
| 6 |
Este ejemplo realiza una reserva compartida en la columna 'MSRP' de la tabla 'CARS'. Una reserva compartida no bloquea el objeto para su modificación, pero impide que otras sesiones obtengan un bloqueo exclusivo sobre ese objeto o sus objetos padres (en este caso, la tabla 'CARS' y la caslib 'CASUSER').
| 1 | |
| 2 | PROC CAS; |
| 3 | ACCESSCONTROL.checkOutObject / objectSelector={objType='COLUMN', caslib='CASUSER', TABLE='CARS', column='MSRP'}, checkOutType='SHARED'; |
| 4 | |
| 5 | RUN; |
| 6 |
En este ejemplo, intentamos reservar una tabla 'NonExistentTable' que no existe. Al establecer 'checkoutParent=true', la acción no falla, sino que reserva el objeto padre, que es la caslib 'CASUSER'.
| 1 | |
| 2 | PROC CAS; |
| 3 | ACCESSCONTROL.checkOutObject / objectSelector={objType='TABLE', caslib='CASUSER', TABLE='NonExistentTable'}, checkOutType='EXCLUSIVE', checkoutParent=true; |
| 4 | |
| 5 | RUN; |
| 6 |