ciao!

ho sviluppato un'applicazione in python che si connette ad un db oracle ed esegue alcune query.
sul pc in locale funziona alla perfezione.
su un altro server, sempre nella rete locale, pure.
poi l'ho installato anche su un altro server, sempre nella rete locale, ma non c'è verso di fargli fare questa query.
in tutti i casi ho installato python 3.10 e la stessa versione delle librerie.

questo il codice completo dello script:
codice:
from MonitorFile import MonitorFile
from utils import *
from datetime import date

def articoli():
    dd = date.today()
    today = dd.strftime('%Y-%m-%d')
    cmd = """ 
            SELECT TRIM(MAT_ANAG.NPAM)                                                                       NPAM,
                   TRIM(SUBSTR(MAT_ANAG.CODINT, 1, 8))                                                       MODELLO,
                   TRIM(FN_B2B_DESC_MAT('XXL', ' ', SUBSTR(MAT_ANAG.CODINT, 1, 8)))                          DESCRIZ,
                   TRIM(SUBSTR(CODINT, 10, 4))                                                               COLORE,
                   TRIM(FN_B2B_DESC_ATRR_AMM('XXL', 'A-VAR', SUBSTR(MAT_ANAG.CODINT, 10, 4)))                COL_DESC,
                   TRIM(SUBSTR(MAT_ANAG.CODINT, 15))                                                         TG,
                   TRIM(FN_B2B_TROVA_ART_ATTR('XXL', MAT_ANAG.NPAM, 'PACCHETTO'))                            PACCHETTO,
                   TRIM(FN_B2B_DESC_ATRR_AMM('XXL', 'PACCHETTO',
                   FN_B2B_TROVA_ART_ATTR('XXL', MAT_ANAG.NPAM, 'PACCHETTO')))      PACC_DESC,
                   TRIM(FN_B2B_TROVA_ART_ATTR('XXL', MAT_ANAG.NPAM, 'A-COMPOS'))                             COMPOSIZIONE,
                   TRIM(FN_B2B_TROVA_ART_ATTR('XXL', MAT_ANAG.NPAM, 'MERCEOL'))                              GRPMERC,
                   TRIM(FN_B2B_TROVA_ART_ATTR('XXL', MAT_ANAG.NPAM, 'FAMIGLIA'))                             FAMIGLIA,
                   TRIM(FN_B2B_TROVA_ART_ATTR('XXL', MAT_ANAG.NPAM, 'BRIEFING'))                             BRIEFING,
                   TRIM(FN_B2B_TROVA_ART_ATTR('XXL', MAT_ANAG.NPAM, 'A-CLASSCOMB'))                          VOCEDOG,
                   TRIM(MAT_SINONIMI.SINONIMO)                                                               EAN,
                   TRIM(SUBSTR(MAT_ANAG.CODINT, 1, 4))                                                       COLL,
                   TRIM(FN_B2B_TROVA_ART_ATTR('XXL', MAT_ANAG.NPAM, 'A-PNTG'))                               PT,
                   FN_B2B_PREZZO_ARTICOLO('XXL', 'LF', '1616', 1, '01', TRIM(SUBSTR(MAT_ANAG.CODINT, 1, 8))) COSTO,
                   FN_B2B_PREZZO_ARTICOLO('XXL', 'OF', '1616', 1, '01', TRIM(SUBSTR(MAT_ANAG.CODINT, 1, 8))) RETAIL,
                   FN_B2B_PREZZO_ARTICOLO('XXL', 'OF', '1616', 2, '01', TRIM(SUBSTR(MAT_ANAG.CODINT, 1, 8))) VETRINA,
                   FN_B2B_PREZZO_ARTICOLO('XXL', 'OF', '2020', 1, '01', TRIM(SUBSTR(MAT_ANAG.CODINT, 1, 8))) LELLO,
                   FN_B2B_BRAND(TRIM(SUBSTR(MAT_ANAG.CODINT, 1, 8)))                                         BRAND
            FROM MAT_ANAG
                     INNER JOIN MAT_ATTRIB_ESTESI MODVARTG ON MODVARTG.NPAM = MAT_ANAG.NPAM
                     INNER JOIN MAT_SINONIMI ON MAT_SINONIMI.NPAM = MAT_ANAG.NPAM
            WHERE MAT_ANAG.DITMAT = 'XXL'
              AND MAT_ANAG.FVL = ' '
              AND MAT_SINONIMI.DITMAT = 'XXL'
              AND MAT_SINONIMI.FVL = ' '
              AND MAT_SINONIMI.TIPO = 'B'
              AND MODVARTG.DITMAT = 'XXL'
              AND MODVARTG.CODICE_ATTR = 'A-MODVARTG'
    """

    # cmd += "AND MAT_ANAG.CODINT LIKE 'C231%'"
    cmd += "AND TO_CHAR(MAT_ANAG.TSTP_MOD, 'YYYYMMDD') BETWEEN TO_CHAR(SYSDATE - 2, 'YYYYMMDD') AND TO_CHAR(SYSDATE, 'YYYYMMDD')"
    # cmd += " AND TO_CHAR(MAT_ANAG.TSTP_MOD, 'yyyy-mm-dd') = '" + today + "'"
    # cmd += " AND TO_CHAR(MAT_ANAG.TSTP_MOD, 'yyyy-mm-dd') BETWEEN '2022-03-01' AND '2022-06-14'"

    create_csv('articoli.csv', cmd, 'csv_articoli')

def colori():
    cmd = "SELECT valore, desc1024 FROM ATTREST_AMMESSI WHERE ditta_attr = 'XXL' AND codice_attr = 'A-VAR';"
    create_csv('colori.csv', cmd, 'csv_articoli')

def taglie():
    cmd = "SELECT valore, desc1024 FROM ATTREST_AMMESSI WHERE ditta_attr = 'XXL' AND codice_attr = 'A-PNTG';"
    create_csv('taglie.csv', cmd, 'csv_articoli')

def get_articoli():
    # colori()
    # taglie()
    articoli()

    # event_handler = MonitorFile('Articoli')
    # event_handler.crea_semaforo()
    # event_handler.run_observer()

if __name__ == '__main__':
    get_articoli()
questo l'errore che mi da:
codice:
Traceback (most recent call last):
  File "articoli.py", line 68, in <module>
    get_articoli()
  File "articoli.py", line 61, in get_articoli
    articoli()
  File "\articoli.py", line 48, in articoli
    create_csv('articoli.csv', cmd, 'csv_articoli')
  File "utils.py", line 45, in create_csv
    rows = cursor.execute(cmd)
pyodbc.ProgrammingError: ('42S22', '[42S22] [Oracle][ODBC][Ora]ORA-00904: "FN_B2B_BRAND": invalid identifier\n\x00⩲ѤūびŮ\x01ŴդżʃƂŤɼ\x04\x03ū㩲Ѥū䁳Ů\x01Ŵ٤ɼʃƂŤͼ\x04\x03ū䩲ݤū偳Ů\x01ŴࡤͼʃƂѼ।Ŷ奲Ŵ\u0a64ѼʃƂ|żɼͼѼզS\u0b29牎\t\x00៩ (904) (SQLExecDirectW)')

Process finished with exit code 1
non ho proprio idee....