Boucle If avec Beanshell

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Boucle If avec Beanshell

Camila
Bonjour !

Je viens sur la mailing list car j'ai un petit souci avec un script Beanshell... Notamment avec une boucle if, qui ne fonctionne pas (mais aucune erreur apparaît...)

Je voudrais ajouter une petite ligne à la fin de mes codes pour dire que si une table est vide alors elle peut être supprimée.

Pour cela, je dis que si (sum(mon_champ) == null) alors je supprime ma table.

mon code :

 if (SQL("select sum(avg_surface_logement) from sc2_avg_surface_logement;") == null) {

        SQL("drop table sc2_avg_surface_logement purge;");
       
         }

Lorsque que je lance mon script, dans le Output, j'ai ça :



Donc ma table est bien vide, je n'ai aucune erreur qui s'affiche mais pourtant mon
SQL("drop table sc2_avg_surface_logement purge;"); ne s'exécute pas...  

Avez-vous une idée d'où cela pourrait venir ? Peut-être ai-je oublié quelque chose...?  Ou alors il faut utiliser une autre méthode ?

Merci par avance !
Cordialement,
Camila.
Reply | Threaded
Open this post in threaded view
|

Re: Boucle If avec Beanshell

Alexis.G
Bonjour,

Tu es sûre de ce que renvoie SQL("select sum(avg_surface_logement) from sc2_avg_surface_logement;") ? Le test de nullité me semble louche, donc je t'invite à imprimer la valeur (y a une commande beanshell qui permet de faire ça, si je me souviens bien, genre print)

Dis nous ce que ça donne !

Alexis.

2012/10/9 Camila [via OrbisGIS] <[hidden email]>
Bonjour !

Je viens sur la mailing list car j'ai un petit souci avec un script Beanshell... Notamment avec une boucle if, qui ne fonctionne pas (mais aucune erreur apparaît...)

Je voudrais ajouter une petite ligne à la fin de mes codes pour dire que si une table est vide alors elle peut être supprimée.

Pour cela, je dis que si (sum(mon_champ) == null) alors je supprime ma table.

mon code :

 if (SQL("select sum(avg_surface_logement) from sc2_avg_surface_logement;") == null) {

        SQL("drop table sc2_avg_surface_logement purge;");
       
         }

Lorsque que je lance mon script, dans le Output, j'ai ça :



Donc ma table est bien vide, je n'ai aucune erreur qui s'affiche mais pourtant mon
SQL("drop table sc2_avg_surface_logement purge;"); ne s'exécute pas...  

Avez-vous une idée d'où cela pourrait venir ? Peut-être ai-je oublié quelque chose...?  Ou alors il faut utiliser une autre méthode ?

Merci par avance !
Cordialement,
Camila.



If you reply to this email, your message will be added to the discussion below:
http://orbisgis.3871844.n2.nabble.com/Boucle-If-avec-Beanshell-tp7574692.html
To start a new topic under OrbisGIS Users, email [hidden email]
To unsubscribe from OrbisGIS, click here.
NAML



--
OrbisGIS supporter.
Reply | Threaded
Open this post in threaded view
|

Re: Boucle If avec Beanshell

Camila
Merci pour la réponse !

Alors..., si je fais :

    print(SQL("select sum(avg_surface_logement) from sc2_avg_surface_logement;"));

ça me donne ça :



Ma table ne contient aucune ligne... c'est peut-être pour ça que "null" n'est pas adapté... ?? Mais je ne vois pas comment je pourrais faire sinon...

Merci beaucoup!
Camila.

Reply | Threaded
Open this post in threaded view
|

Re: Boucle If avec Beanshell

Alexis.G
et
print(SQL("select sum(avg_surface_logement) from sc2_avg_surface_logement;").isEmpty());
?
Par ailleurs, pourquoi ne pas utiliser
select count(*) from matable
pour voir s'il n'y a pas de lignes dans la table ?

2012/10/9 Camila [via OrbisGIS] <[hidden email]>
Merci pour la réponse !

Alors..., si je fais :

    print(SQL("select sum(avg_surface_logement) from sc2_avg_surface_logement;"));

ça me donne ça :



Ma table ne contient aucune ligne... c'est peut-être pour ça que "null" n'est pas adapté... ?? Mais je ne vois pas comment je pourrais faire sinon...

Merci beaucoup!
Camila.




If you reply to this email, your message will be added to the discussion below:
http://orbisgis.3871844.n2.nabble.com/Boucle-If-avec-Beanshell-tp7574692p7574694.html
To start a new topic under OrbisGIS Users, email [hidden email]
To unsubscribe from OrbisGIS, click here.
NAML



--
OrbisGIS supporter.
Reply | Threaded
Open this post in threaded view
|

Re: Boucle If avec Beanshell

Camila
Alors, j'ai fait d'autres tests en prenant en compte ce que vous m'avez dit...!

Si j'écris ça :
print(SQL("select sum(avg_surface_logement) from sc2_avg_surface_logement;").isEmpty());
ou ça :
print(SQL("select count(*) from sc2_avg_surface_logement;").isEmpty())

J'ai une erreur Beanshell qui apparaît :  .isEmpty() et soit sum null, soit count 0 ensuite.

J'ai essayé ça:
          if (SQL("select count(*) from sc2_avg_surface_logement;") == 0); {

              SQL("drop table sc2_avg_surface_logement purge;");
       
            }

Là le SQL("drop table sc2_avg_surface_logement purge;"); sans erreur. Mais j'ai testé cette boucle avec une table vide et une table contenant des lignes, et dans les deux cas, les tables sont supprimées. Comme si le If n'était pas pris en compte.

j'ai aussi essayé :
         if (print(SQL("select count(*) from sc2_avg_surface_logement;") == 0) {

              SQL("drop table sc2_avg_surface_logement purge;");
       
            }
Une erreur beanshell apparaît.

Je ne vois pas d'où peut venir le problème...

Merci pour votre aide.

Camila.


Reply | Threaded
Open this post in threaded view
|

Re: Boucle If avec Beanshell

ebocher
Administrator
Demat Camila,

La commande SQL('') ne retourne rien. Elle est utilisée pour exécuter un script SQL.

Tu peux voir son implémentation https://github.com/irstv/orbisgis/blob/master/orbisgis-ui/src/main/java/org/orbisgis/core/ui/plugins/views/beanShellConsole/commands/SQL.java.

Pour ton besoin, il faudrait donc que nous ajoutions une commande comme SQLTo('select * from data'); qui permet de renvoyer une datasource. Tu pourrais donc tester si le résultat est null ou pas également manipuler ensuite cette datasource.

Je vais en discuter avec l'équipe.

Erwan
Reply | Threaded
Open this post in threaded view
|

Re: Boucle If avec Beanshell

Camila
Demat !

Merci pour l'info... !
Je comprends mieux pourquoi ça ne fonctionne pas !

Je voudrais pouvoir faire cette boucle car j'exécute mon script pour tous les scénarios. Or je n'ai pas nécessairement les données pour tous les scénarios donc je me retrouve parfois avec des tables vides, et donc sans intérêt... C'est pourquoi les supprimer serait plus clair et propre ! et me permettrait d'optimiser le reste du script, et notamment la création des tables qui me servent à générer des graphiques ensuite...

Merci de me tenir au courant de la suite pour cette commande SQLTo(' ') !

Cordialement,
A+
Camila