Bonjour !
J’arrive bien à faire des INSERT dans une table à partir d’une macro mais ça se corse lorsque que la requête contient des CONCAT ou des CAST… Je n’arrive pas à trouver la bonne structure.
La requête, qui fonctionne bien en mode SQL, est la suivante :
SELECT ROWNUM( ) "Ligne", "T_PAIEMENTS"."T_PAI_DatePaiement" "Date", "T_MODESPAIEMENT"."T_MOD_JournalComptable" "Journal", "T_MODESPAIEMENT"."T_MOD_CodeComptable" "Compte", 'LA' "LibelleAutomatique", CONCAT( '"Encaissement ', "T_MOD_LibelleModePaiement", '"' ) "LibelleManuel", CONCAT( '"', CAST( ( "ID_PAI" + 200000 ) AS VARCHAR ( 20 ) ), '"' ) "Piece", CASE WHEN "T_CHE_MontantCheque" > 0 THEN "T_CHE_MontantCheque" ELSE ABS( "T_PAI_MontantPaye" ) END "Montant", CASE WHEN "T_PAI_MontantPaye" > 0 THEN 'D' ELSE 'C' END "Sens", CASE WHEN "T_CHE_DateRemiseEnBanque" > "T_PAI_DatePaiement" THEN "T_CHE_DateRemiseEnBanque" ELSE "T_PAI_DatePaiement" END "Echeance", 'EUR' "Devise" FROM { oj "T_CHEQUES" RIGHT OUTER JOIN "T_PAIEMENTS" ON "T_CHEQUES"."T_CHE_Ref_Paiements" = "T_PAIEMENTS"."ID_PAI" }, "T_MODESPAIEMENT", "T_ADHERENTS", "T_SOUSCRIPTEURS" WHERE "T_PAIEMENTS"."T_PAI_Ref_ModePaiement" = "T_MODESPAIEMENT"."ID_MOD" AND "T_ADHERENTS"."T_ADH_Ref_Souscripteurs" = "T_SOUSCRIPTEURS"."ID_SOU" AND "T_PAIEMENTS"."T_PAI_Ref_Souscripteurs" = "T_SOUSCRIPTEURS"."ID_SOU"
Lorsque je la transforme pour faire un INSERT, via une macro, dans une table temporaire, cela donne ça:
"INSERT INTO ""T_EXPORT_COMPTA"" (""Ligne"", ""Date"", ""Journal"", ""Compte"", ""LibelleAuto"", ""LibelleManuel"", ""Piece"", ""Montant"", ""Sens"", ""Echeance"", ""Devise"") SELECT ROWNUM( ) ""Ligne"", ""T_PAIEMENTS"".""T_PAI_DatePaiement"" ""Date"", ""T_MODESPAIEMENT"".""T_MOD_JournalComptable"" ""Journal"", ""ID_SOU"" + 41100000 ""Compte"", 'LA' ""LibelleAutomatique"", CONCAT( '"Encaissement ', ""T_SOU_NomPrenom"", '"' ) ""LibelleManuel"", CONCAT( '"', CAST( ( ""ID_SOU"" + 300000 ) AS VARCHAR ( 20 ) ), '"' ) ""Piece"", CASE WHEN ""T_CHE_MontantCheque"" > 0 THEN ""T_CHE_MontantCheque"" ELSE ABS( ""T_PAI_MontantPaye"" ) END ""Montant"", CASE WHEN ""T_PAI_MontantPaye"" > 0 THEN 'C' ELSE 'D' END ""Sens"", CASE WHEN ""T_CHE_DateRemiseEnBanque"" > ""T_PAI_DatePaiement"" THEN ""T_CHE_DateRemiseEnBanque"" ELSE ""T_PAI_DatePaiement"" END ""Echeance"", 'EUR' ""Devise"" FROM { oj ""T_CHEQUES"" RIGHT OUTER JOIN ""T_PAIEMENTS"" ON ""T_CHEQUES"".""T_CHE_Ref_Paiements"" = ""T_PAIEMENTS"".""ID_PAI"" }, ""T_MODESPAIEMENT"", ""T_ADHERENTS"", ""T_SOUSCRIPTEURS"" WHERE ""T_PAIEMENTS"".""T_PAI_Ref_ModePaiement"" = ""T_MODESPAIEMENT"".""ID_MOD"" AND ""T_ADHERENTS"".""T_ADH_Ref_Souscripteurs"" = ""T_SOUSCRIPTEURS"".""ID_SOU"" AND ""T_PAIEMENTS"".""T_PAI_Ref_Souscripteurs"" = ""T_SOUSCRIPTEURS"".""ID_SOU"""
C’est à dire que j’ai entouré tous les noms de Tables/Champ par des doubles quotes et cela fonctionne bien tant que je n’utilise pas les fonctions CONCAT ou CAST…
D’où mes interrogations :
Peut-on utiliser ces fonctions (CONCAT ou CAST) dans ces conditions ?
Ou bien est-ce la structure de ces fonctions qui mérite des doubles-quotes mais où ?
Merci pour votre aide.
PS : J’utilise LiboBase 6.4.7.2 et hsqldb 2.5.1 en mode client/serveur