Saturday, April 6, 2019

SQL*Engine - Dynamic SQL Script Processor - Part - 5 - Synonyms/Grants

SQL*Engine - Part 1 - Initial Overview/Demonstration
SQL*Engine - Part 2 - Launching PeopleSoft Process Requests
SQL*Engine - Part 3 - Command Guide
SQL*Engine - Part 4 - @SET Variables

I frequently use SQL*Engine to resolve mundane tasks. For instance, when you create tables in PeopleSoft using Application Designer the DDL model may not include synonyms & grant permissions (This typically applies to test environments) or they may have been dropped for some reason. This Blog Entry shows a quick method of creating synonyms (if needed) & assigning the default grants required so I can proceed with testing.

*****************************************************************
*                                                               *
*    MODULE: XXSQI_SG_DEPEXP.SQX                                *
*    AUTHOR: TONY DELIA.                                        *
*      DATE: 07/31/2016.                                        *
*      DESC: SQL*ENGINE SCRIPT - CREATE GRANTS/SYNONYMS.        *
*                                                               *
*****************************************************************
@ON_ERROR=CONTINUE
@DELIMITER=|
@TIMING=ON
@SAFETY=ON
@SPOOL=OFF
*****************************************************************
*  PROGRAM VARIABLES                                            *
*****************************************************************
@HDR_REF=DEPEXP_Testing
@HDR_DESCR=Assign Test Environment Synonyms/Grants
@SET=&&DBNAME=@DBNAME
@SET=&&LIB=/app/iface/&&DBNAME/19000/AP/inbound
*****************************************************************
*   Set OBJECT (TABLE NAME)                                     *
*****************************************************************
@SET=&&OBJECT=PS_XX_DEPEXP_DATA 
@SCRIPT=&&LIB/XXSQL_SG.LIB
*****************************************************************
*   End of SQL*Engine Script                                    *
*****************************************************************


This SQL*Engine script (XXSQI_SG_DEPEXP.SQX) will utilize a library routine XXSQL_SG.LIB I have set up. All the primary script needs to do is populate the &&OBJECT variable with the table name (in this case PS_XX_DEPEXP_DATA) & pass control to the library script via @SCRIPT=&&LIB/XXSQL_SG.LIB (in lieu of a hard-coded path, &&LIB must point to the proper location relative to the database).

*****************************************************************
*                                                               *
*    MODULE: XXSQL_SG.LIB                                       *
*    AUTHOR: TONY DELIA.                                        *
*      DATE: 02/13/2004.                                        *
*      DESC: SQL*ENGINE SCRIPT - CREATE GRANTS/SYNONYMS.        *
*                                                               *
*****************************************************************
*                                                               *
*  Required Substitution Variables                              *
*  --------------------------------------                       *
*  &&OBJECT = Table Object                                      *
*                                                               *
*****************************************************************
*****************************************************************
*   TEST IF SYNONYM EXISTS                                      *
*****************************************************************
@STEP=COUNT_SYNONYM_&&OBJECT
@COUNT=ALL_SYNONYMS
 WHERE OWNER        = 'PUBLIC'
   AND SYNONYM_NAME = '&&OBJECT'
/
*****************************************************************
*   CREATE SYNONYM IF NOT EXISTS                                *
*****************************************************************
@STEP=SYNONYM_&&OBJECT
@COND=ZERO.COUNT_SYNONYM_&&OBJECT
CREATE PUBLIC SYNONYM &&OBJECT
   FOR SYSADM.&&OBJECT
/
*****************************************************************
*   GRANT - PSSELECT                                            *
*****************************************************************
@STEP=GRANT_PSSELECT_&&OBJECT
@COND=NULL
GRANT SELECT
   ON SYSADM.&&OBJECT
   TO PSSELECT
/
*****************************************************************
*   GRANT - PSUPDATE                                            *
*****************************************************************
@STEP=GRANT_PSUPDATE_&&OBJECT
@COND=NULL
GRANT INSERT, UPDATE
   ON SYSADM.&&OBJECT
   TO PSUPDATE
/
*****************************************************************
*   GRANT - PSDELETE                                            *
*****************************************************************
@STEP=GRANT_PSDELETE_&&OBJECT
@COND=NULL
GRANT DELETE
   ON SYSADM.&&OBJECT
   TO PSDELETE
/
*****************************************************************
*   End of SQL*Engine Script                                    *
*****************************************************************


XXSQL_SG.LIB determines if the synonym exists & using the @COND= directive performs the CREATE SYNONYM if needed. Next three GRANT steps are executed for SELECT, INSERT & UPDATE and DELETE. There are 5 Steps within the library script with each assigned a unique step name based on the &&OBJECT parameter.

*****************************************************************
*   Set OBJECT (TABLE NAME)                                     *
*****************************************************************
@SET=&&OBJECT=PS_DISTRIB_LINE    
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_PYMNT_VCHR_XREF 
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_VCHR_FRGH_CHRG  
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_VCHR_LINE_WTHD  
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_VCHR_LN_TX_DTL  
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_VCHR_REG_LC     
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_VCHR_SALETX_CHG 
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_VCHR_USETAX_CHG 
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_VCHR_VNDR_BANK  
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_VCHR_VNDR_INFO  
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_VCH_DUP_INV_REG 
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_VENDOR_WTHD_JUR 
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_VOUCHER         
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_VOUCHER_LINE    
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_XX_PC_VCHR_PEND 
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_XX_PN_VCHR_XREF 
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_XX_VCHR_ACH     
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_XX_VNDR_CAR_DEB 
@SCRIPT=&&LIB/XXSQL_SG.LIB
@SET=&&OBJECT=PS_VCHRLN_MISC_CHG
@SCRIPT=&&LIB/XXSQL_SG.LIB
*****************************************************************


Add as many tables as needed by repetitively assigning them to the &&OBJECT variable & calling the script. SQL*Engine allows me to resolve this situation in minutes (writing or reusing a primary script and executing it). No technical administrative bureaucracy & forms. Just set the &&OBJECT variable & let it fly...