Poiché si utilizza Oracle, è necessario utilizzare una variabile di collegamento anziché SQL dinamico e quindi impostare il valore nella raccolta di parametri dell'oggetto comando. Non solo impedirà SQL injection, ma ottimizzerà meglio la tua query.
Inoltre, sembra che nella tua istruzione SQL manchi uno spazio prima della clausola order by. Ciò potrebbe facilmente causare il tuo errore. Vedi sotto:non testato, ma dovrebbe darti l'idea.
SQL = "SELECT A.cust_ky, A.incid_id, A.OPEN_TS, A.CLOSE_TS, A.REC_UPD_TS, B.wrkgp_id, A.CURR_AGNT_KY, A.incid_ttl_dn " _
& "FROM (MAINTBLS.INCID_FAB A INNER JOIN MAINTBLS.DEPTMNT B ON A.curr_wrkgp_ky=B.wrkgp_ky) " _
& "WHERE B.wrkgp_id= :wrkgp And (A.open_fg = 1 OR A.pend_fg = 1) " _
& "ORDER BY A.cust_ky, A.curr_agnt_ky ASC"
With cmd
.ActiveConnection = conn
.CommandText = SQL
.CommandType = adCmdText
.Parameters.Append .CreateParameter(, adVarChar, adParamInput, wrkgp)
End With