Je fais plusieurs saisies de données dans un programme mon Python (dans un cahier Jupyter) en utilisant le code SQL DB2 qui a déjà été écrit - Je l'ai simplement collé dans des chaînes entre guillemets et ouvrant une connexion JDBC en utilisant la bibliothèque Jaydebe. Cela a bien fonctionné pour plusieurs tirages, mais pour une traction plus compliquée, je continue d'obtenir une erreur "EOF dans une chaîne multi-lignes". J'ai confirmé que le SQL fonctionne bien quand je le colle dans WinSQL, donc je ne pense pas que ce soit un problème de parenthèse manquante ou quelque chose du genre. Je vais coller le bloc de code, puis l'erreur.SQL en python EOF
curs = conn.cursor()
curs.execute("""/* Determine Final Payment Date for Closed Claims */
declare global temporary table session.cause_close_dt (
hcode varchar(25),
claim_number varchar(15),
spec_cov char(2),
cause_of_loss char(2),
final_pmt_dt date)
with replace partitioning key (hcode) using hashing on commit preserve rows;
insert into session.cause_close_dt (
hcode,
claim_number,
spec_cov,
cause_of_loss,
final_pmt_dt)
select distinct
hcode,
state||pui||division||trim(claim_number) as claim_number,
spec_cov,
cause_of_loss,
max(date_of_final_payment) as final_pmt_dt
from
v23.fire_los_v
where
state in('05','55','75')
and hcode in('022###')
and payment_status in('1','A')
and date_of_final_payment is not null
and year(date_of_final_payment) > 2004
group by
hcode,
state||pui||division||trim(claim_number),
spec_cov,
cause_of_loss
order by
1,2,3,4
/* Summarize Loss Data by Closed Date */
select
state,
hcode,
cause_close_yr,
cause_close_qtr,
kind_of_loss,
sum(paid_cause_cnt_ncat) as ncpd_cause_cnt,
sum(paid_amt_tot_ncat) as ncpd_amt
from (
select
u92.statename_u(a.state) as state,
case
when a.hcode in('022###') then 'PIM'
else ''
end as hcode,
a.year,
a.state||a.pui||a.division||trim(a.claim_number) as claim_number,
a.kol_sum as kind_of_loss,
a.cause_of_loss,
a.spec_cov,
b.final_pmt_dt,
year(b.final_pmt_dt) as cause_close_yr,
quarter(b.final_pmt_dt) as cause_close_qtr,
paid_cause_cnt_ncat,
paid_amt_tot_ncat
from
v23.fire_los_v a
left outer join session.cause_close_dt b on
a.hcode = b.hcode
and a.state||a.pui||a.division||trim(a.claim_number) = b.claim_number
and a.cause_of_loss = b.cause_of_loss
and a.spec_cov = b.spec_cov
where
a.state in('05','55','75')
and a.hcode in('022###'))
where
cause_close_yr > 2004
group by
state,
hcode,
cause_close_yr,
cause_close_qtr,
kind_of_loss
order by 1,2,5,3,4;
""")
test = curs.fetchall()
L'erreur que je me suit:
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line string', (1, 0))
com.ibm.db2.jcc.am.SqlSyntaxErrorExceptionPyRaisableTraceback (most recent call last)
<ipython-input-32-90277cac8343> in <module>()
85 kind_of_loss
86 order by 1,2,5,3,4;
---> 87 """)
88 test = curs.fetchall()
/opt/anaconda/4.1.1/lib/python2.7/site-packages/jaydebeapi/__init__.pyc in execute(self, operation, parameters)
495 parameters =()
496 self._close_last()
--> 497 self._prep = self._connection.jconn.prepareStatement(operation)
498 self._set_stmt_parms(self._prep, parameters)
499 try:
com.ibm.db2.jcc.am.SqlSyntaxErrorExceptionPyRaisable: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=;
insert into session.cause_clos;commit preserve rows;<distribute_by>, DRIVER=4.15.122
L'erreur pointe toujours à la dernière ligne avec les triples guillemets. Je ne suis pas sûr que l'espacement du SQL jette des choses. J'ai essayé quelques choses comme changer l'espacement et enlever les points-virgules mais rien ne semble fonctionner.
Il semblerait qu'il manque un point-virgule après la clause 'order by' de la première instruction' select'. – chepner
J'ai ajouté cela, j'ai la même erreur. Je devrais noter que je ne pense pas que les points-virgules sont nécessaires - je cours fréquemment SQL dans WinSQL sans les employer. – user5888721
Le message d'erreur semble indiquer que la ligne '" "") 'est l'emplacement de la chaîne _starts_, ce qui est impair –