IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Script chargement de schema dans postgreSQL: Probleme injection Function


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut Script chargement de schema dans postgreSQL: Probleme injection Function
    Bonjour,

    Je travaille sur postgreSQL 9.1.

    J'ai écrit ce script et j'ai des erreurs que je ne comprends pas???

    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    #!/bin/sh
     
    #Demande de toutes les informaions dont nous avons besoin
    echo -n "Entrez le nom d'utilisateur PostgreSQL [postgres] : "
    read UserPG
    #Vérification qu'un utilisateur à bien été renseigné pour la connection à PostgreSQL.
    case $UserPG in
    	"") UserPG="postgres"
    	    echo "Bienvenu $UserPG\n";;
     
    	* ) echo "Bienvenu $UserPG\n";;
    esac
     
    echo -n "Mot de passe : "
    read  PGpassword
    #Vérification qu'un mot de passe à bien été renseigné pour la connection à PostgreSQL.
    case $PGpassword in
    	"") echo "Pas de mot de passe PostgreSQL définit\n"
    	    exit 1;; #exit shell script
    	*) echo "Votre mot de passe à bien été pris en compte\n";;
    esac
     
    echo -n "Ip ou non du serveur PostgreSQL  [localhost] ?"
    read PGhostname
    #Vérification qu'une IP ou un nom machine à bien été renseignée pour la connection à PostgreSQL.
    case $PGhostname in
    	"") PGhostname="localhost"
    	   echo "L'hôte ou l'IP PostgreSQL est $PGhostname\n";;
    	*) echo "L'hôte ou l'IP PostgreSQL est $PGhostname\n";;
    esac
     
    echo -n "Port du serveur PostgreSQL [5432] ? "
    read port_num
    #Vérification qu'un port à bien été renseigné pour la connection à PostgreSQL.
    case $port_num in
    	"") port_num="5432"
    	    echo "Le port par défaut ($port_num) sera utilisé\n";;
     
    	*) echo "Le port suivant ($port_num) sera utilisé\n";;
    esac
     
    #Récupération du répertoir courant
    date_dump=`ls -d /home/user/application/Dump/* | tail -1 | cut -d '/' -f5`
    echo $date_dump
    echo -n "Nom de la base de donnée pour Appli? \n [1. PROD] \n [2. QUALIF] \n [3. FORMATION] \n [4. Toutes les plateformes]"
    read appli_db
    #Vérification qu'une base de donnée à bien été renseignée pour travailler dessus.
    case $appli_db in
    	"" ) 	echo "Pas de base de donnée PostgreSQL définit\n"
    	     	exit 1;; #exit shell script
    	1|PROD|prod|Prod|production|Production|PRODUCTION)
    		CaseDB='1'
    		appli_db="prod_app"
    		echo "La base de donnée PostgreSQL est $appli_db\n"
    		dump_location=/home/user/application/Dump/$date_dump/dump_application_Eapp_"$date_dump"_000501.dmp;;
    	2|QUALIF|qualif|Qualif|QUALIFICATION|qualification|QUALIFICATION)
    		CaseDB='2'
    		appli_db="qualif_app"
    		echo "La base de donnée PostgreSQL est $appli_db\n"
    		dump_location=/home/user/application/Dump/$date_dump/dump_application_Eapp_"$date_dump"_000501.dmp;;
    	3|FORMATION|formation|Formation|FORM|form|Form)
    		CaseDB='3'
    		appli_db"form_app"
    		echo "La base de donnée PostgreSQL est $appli_db\n"
    		dump_location=/home/user/application/Dump/$date_dump/dump_application_Eapp_"$date_dump"_000501.dmp;;
    	4|tous|toutes|"toutes les bases"|"Toutes les bases")
    		CaseDB='4'
    		appli_db1="prod_app"
    		dump_location1=/home/user/application/Dump/$date_dump/dump_application_Eapp_"$date_dump"_000501.dmp
    		appli_db2="qualif_app"
    		dump_location2=/home/user/application/Dump/$date_dump/dump_application_Eapp_"$date_dump"_000501.dmp
    		appli_db3="form_app"
    		dump_location3=/home/user/application/Dump/$date_dump/dump_application_Eapp_"$date_dump"_000501.dmp;;
    esac
     
    if [ $CaseDB = 1 ] || [ $CaseDB = 2 ] || [ $CaseDB = 3 ] ; then
    		#Création du fichier permettant de s'identifier au serveur PostgreSQL.
    		touch $HOME/.pgpass
    		#Attribution des droits sur le fichier, pas d'autre choix que 0600, si non, ca ne fonctionne pas.
    		chmod 0600 $HOME/.pgpass
    		#Remplissage du fichier avec les bons parametres
    		echo "$PGhostname:$port_num:$appli_db:$UserPG:$PGpassword" > $HOME/.pgpass
    		#
    		psql -h $PGhostname -p $port_num $appli_db -U $UserPG << EOF
    		DROP SCHEMA IF EXISTS application CASCADE;
    EOF
    # Attention, EOF ne doit pas avaoir d'espace avant. si non, cela génèrera une erreur.
    		sleep 3
    		cat $dump_location | psql  -h $PGhostname -p $port_num $appli_db -U $UserPG
    		psql -h $PGhostname -p $port_num $appli_db -U $UserPG << EOF
    		DROP FUNCTION IF EXISTS pg_catalog.text(integer) CASCADE;
    		CREATE FUNCTION pg_catalog.text(integer) RETURNS text AS 'SELECT textin(int4out($1));' LANGUAGE sql IMMUTABLE STRICT COST 100;
    		DROP CAST IF EXISTS (integer AS text)  CASCADE;
    		CREATE CAST (integer AS text) WITH FUNCTION pg_catalog.text(integer) AS IMPLICIT;
    EOF
                    #Efface le mot de passe dans la variable et le fichier.
    		PGpassword=""
    		rm $HOME/.pgpass
    else
    		#Création du fichier permettant de s'identifier au serveur PostgreSQL.
    		touch $HOME/.pgpass
    		#Attribution des droits sur le fichier, pas d'autre choix que 0600, si non, ca ne fonctionne pas.
    		chmod 0600 $HOME/.pgpass
    		#Remplissage du fichier avec les bons parametres
    		echo "$PGhostname:$port_num:$appli_db1:$UserPG:$PGpassword" > $HOME/.pgpass
    		#
    		psql -h $PGhostname -p $port_num $appli_db1 -U $UserPG << EOF
    		DROP SCHEMA IF EXISTS application CASCADE;
    EOF
    		sleep 3
    		cat $dump_location1 | psql  -h $PGhostname -p $port_num $appli_db1 -U $UserPG
                    psql -h $PGhostname -p $port_num $appli_db -U $UserPG << EOF
    		DROP FUNCTION IF EXISTS pg_catalog.text(integer) CASCADE;
    		CREATE FUNCTION pg_catalog.text(integer) RETURNS text AS 'SELECT textin(int4out($1));' LANGUAGE sql IMMUTABLE STRICT COST 100;
    		DROP CAST IF EXISTS (integer AS text)  CASCADE;
    		CREATE CAST (integer AS text) WITH FUNCTION pg_catalog.text(integer) AS IMPLICIT;
    EOF
    		#Efface le mot de passe dans la variable et le fichier.
    		rm $HOME/.pgpass
    		#Création du fichier permettant de s'identifier au serveur PostgreSQL.
    		touch $HOME/.pgpass
    		#Attribution des droits sur le fichier, pas d'autre choix que 0600, si non, ca ne fonctionne pas.
    		chmod 0600 $HOME/.pgpass
    		#Remplissage du fichier avec les bons parametres
    		echo "$PGhostname:$port_num:$appli_db2:$UserPG:$PGpassword" > $HOME/.pgpass
    		#
    		psql -h $PGhostname -p $port_num $appli_db2 -U $UserPG << EOF
    		DROP SCHEMA IF EXISTS application CASCADE;
    EOF
    		sleep 3
    		cat $dump_location2 | psql  -h $PGhostname -p $port_num $appli_db2 -U $UserPG
    		#Efface le mot de passe dans la variable et le fichier.
                    psql -h $PGhostname -p $port_num $appli_db -U $UserPG << EOF
    		DROP FUNCTION IF EXISTS pg_catalog.text(integer) CASCADE;
    		CREATE FUNCTION pg_catalog.text(integer) RETURNS text AS 'SELECT textin(int4out($1));' LANGUAGE sql IMMUTABLE STRICT COST 100;
    		DROP CAST IF EXISTS (integer AS text)  CASCADE;
    		CREATE CAST (integer AS text) WITH FUNCTION pg_catalog.text(integer) AS IMPLICIT;
    EOF
    		rm $HOME/.pgpass
    		#Création du fichier permettant de s'identifier au serveur PostgreSQL.
    		touch $HOME/.pgpass
    		#Attribution des droits sur le fichier, pas d'autre choix que 0600, si non, ca ne fonctionne pas.
    		chmod 0600 $HOME/.pgpass
    		#Remplissage du fichier avec les bons parametres
    		echo "$PGhostname:$port_num:$appli_db3:$UserPG:$PGpassword" > $HOME/.pgpass
    		#
    		psql -h $PGhostname -p $port_num $appli_db3 -U $UserPG << EOF
    		DROP SCHEMA IF EXISTS application CASCADE;
    EOF
    		sleep 3
    		cat $dump_location3 | psql  -h $PGhostname -p $port_num $appli_db3 -U $UserPG
    		#Efface le mot de passe dans la variable et le fichier.
                    psql -h $PGhostname -p $port_num $appli_db -U $UserPG << EOF
    		DROP FUNCTION IF EXISTS pg_catalog.text(integer) CASCADE;
    		CREATE FUNCTION pg_catalog.text(integer) RETURNS text AS 'SELECT textin(int4out($1));' LANGUAGE sql IMMUTABLE STRICT COST 100;
    		DROP CAST IF EXISTS (integer AS text)  CASCADE;
    		CREATE CAST (integer AS text) WITH FUNCTION pg_catalog.text(integer) AS IMPLICIT;
    EOF
    		PGpassword=""
    		rm $HOME/.pgpass
    fi
    Le problème vient de ce bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    psql -h $PGhostname -p $port_num $appli_db -U $UserPG << EOF
    		DROP FUNCTION IF EXISTS pg_catalog.text(integer) CASCADE;
    		CREATE FUNCTION pg_catalog.text(integer) RETURNS text AS 'SELECT textin(int4out($1));' LANGUAGE sql IMMUTABLE STRICT COST 100;
    		DROP CAST IF EXISTS (integer AS text)  CASCADE;
    		CREATE CAST (integer AS text) WITH FUNCTION pg_catalog.text(integer) AS IMPLICIT;
    EOF
    L'erreur que j'obtiens est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    NOTICE:  la fonction pg_catalog.text(pg_catalog.int4) n'existe pas, poursuite du traitement
    DROP FUNCTION
    ERREUR:  la fonction int4out() n'existe pas
    LIGNE 1 : ...alog.text(integer) RETURNS text AS 'SELECT textin(int4out())...
                                                                   ^
    ASTUCE : Aucune fonction ne correspond au nom donné et aux types d'arguments.
    Vous devez ajouter des conversions explicites de type.
    NOTICE:  la conversion du type integer vers le type text n'existe pas, poursuite du traitement
    DROP CAST
    ERREUR:  la fonction pg_catalog.text(integer) n'existe pas
    Les mêmes commande dans PGADMIN fonctionne sans problème??? Mes soucis ne sont pas le "notice" mais vraiment les messages d'erreur, car quand je vais voir la liste des fonctions, j'ai bien text(integer) et int4out()???
    Comment corriger mon code pour pouvoir injecter la fonction et le cast si ils n'existent pas?

    Cordialement,
    vandman

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Au premier abord, j'aurais envie de dire que c'est une question SQL, pas bash.

    Cependant, il est possible qu'il n'aime pas ta fonction sans paramètre.
    Et il n'y a pas de paramètre car $1 est interprété et que $1 est vide.
    Médite l'exemple suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $ cat <<EOF
    > toto va au $1
    > EOF
    toto va au
    $ cat <<EOF
    toto va au '$1'
    EOF
     
    toto va au ''
    $ cat <<EOF
    toto va au '\$1'
    EOF
     
    toto va au '$1'
    $ cat <<EOF
    toto va au \$1
    EOF
     
    toto va au $1
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut
    Bonjour,

    Oui et non,

    en mode console:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    psql -h localhost -p 5432 DBAppli -U postgres
    Mot de passe pour l'utilisateur postgres : 
    psql (9.1.14)
    Connexion SSL (chiffrement : DHE-RSA-AES256-SHA, bits : 256)
    Saisissez « help » pour l'aide.
     
    DBAppli=# DROP FUNCTION IF EXISTS pg_catalog.text(integer) CASCADE;
    NOTICE:  DROP cascade sur conversion de integer en text
    DROP FUNCTION
    DBAppli=# CREATE FUNCTION pg_catalog.text(integer) RETURNS text STRICT IMMUTABLE LANGUAGE SQL AS 'SELECT textin(int4out($1));';
    CREATE FUNCTION
    DBAppli=# CREATE CAST (integer AS text) WITH FUNCTION pg_catalog.text(integer) AS IMPLICIT; 
    CREATE CAST
    DBAppli=#
    Dans PGADMIN:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NOTICE:  DROP cascade sur conversion de integer en text
    La requête a été exécutée avec succès en 37 ms, mais ne renvoie aucun résultat.
    Dans mon script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    NOTICE:  la fonction pg_catalog.text(pg_catalog.int4) n'existe pas, poursuite du traitement
    DROP FUNCTION
    ERREUR:  la fonction int4out() n'existe pas
    LIGNE 4 :   AS 'SELECT textin(int4out());';
                                  ^
    ASTUCE : Aucune fonction ne correspond au nom donné et aux types d'arguments.
    Vous devez ajouter des conversions explicites de type.
    NOTICE:  la conversion du type integer vers le type text n'existe pas, poursuite du traitement
    DROP CAST
    ERREUR:  la fonction pg_catalog.text(integer) n'existe pas
    Pourquoi ces différences de résultat?
    Cordialement,
    vandman

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Pour la raison déjà évoquée ? $1 n'est pas interprété dans tes deux premiers cas. Non?

    Une fonction sans paramètre et une fonction avec un paramètre n'ont pas la même signature et sont donc différentes.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par vandman Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    echo -n "Mot de passe : "
    read  PGpassword
    #Vérification qu'un mot de passe à bien été renseigné pour la connection à PostgreSQL.
    case $PGpassword in
    	"") echo "Pas de mot de passe PostgreSQL définit\n"
    	    exit 1;; #exit shell script
    	*) echo "Votre mot de passe à bien été pris en compte\n";;
    esac
     
    echo -n "Ip ou non du serveur PostgreSQL  [localhost] ?"
    read PGhostname
    #Vérification qu'une IP ou un nom machine à bien été renseignée pour la connection à PostgreSQL.
    case $PGhostname in
    	"") PGhostname="localhost"
    	   echo "L'hôte ou l'IP PostgreSQL est $PGhostname\n";;
    	*) echo "L'hôte ou l'IP PostgreSQL est $PGhostname\n";;
    esac
    Bonjour

    En dehors du problème spécifique Postgres, ton code est déjà bien trop lourd. Pourquoi du case/esac pour une simple vérif ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    echo -n "Mot de passe : "
    read  PGpassword
    #Vérification qu'un mot de passe à bien été renseigné pour la connection à PostgreSQL.
    if test -z "$PGpassword"; then
    	echo "Pas de mot de passe PostgreSQL définit\n"
    	exit 1
    fi
    echo "Votre mot de passe à bien été pris en compte\n";;
     
    echo -n "Ip ou non du serveur PostgreSQL  [localhost] ?"
    read PGhostname
    #Vérification qu'une IP ou un nom machine à bien été renseignée pour la connection à PostgreSQL.
    PGhostname=${PGhostname:-localhost}
    echo "L'hôte ou l'IP PostgreSQL est $PGhostname\n"
    Maintenant, ton problème principal vient de "$1" qui est un paramètre de fonction Postgres mais aussi un mot clef du shell et donc transformé par le shell !!!
    Or si tu veux que Postgres reçoive "$1" en tant que tel, il faut demander au shell d'inhiber la transformation !!!
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    psql -h $PGhostname -p $port_num $appli_db -U $UserPG << _EOT_
    DROP FUNCTION IF EXISTS pg_catalog.text(integer) CASCADE;
    CREATE FUNCTION pg_catalog.text(integer) RETURNS text AS 'SELECT textin(int4out(\$1));' LANGUAGE sql IMMUTABLE STRICT COST 100;
    DROP CAST IF EXISTS (integer AS text)  CASCADE;
    CREATE CAST (integer AS text) WITH FUNCTION pg_catalog.text(integer) AS IMPLICIT;
    _EOT_

    Sinon comme tu as pu le remarquer, "EOF" moi je le nomme "_EOT_" comme "End Of Text" et non "End Of File" puisque le code est du texte et pas du fichier !!! et avec des underscores pour éviter une possible homonymie....
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut
    Merci Sve@r, c'est bien ça et ça fonctionne.
    Cordialement,
    vandman

  7. #7
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Je rêve. C'est ce que j'ai montré, dès le premier message.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #8
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut
    Bonjour Flodelarab,
    Désolé, je n'avais pas bien compris ton exemple et n'avais pas pu médité posément.

    Cordialement,
    Vandman

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Je rêve. C'est ce que j'ai montré, dès le premier message.
    Moi non plus je n'avais pas bien lu en détail ce fameux premier message et n'avais alors pas bien compris.
    Surtout la phrase "Et il n'y a pas de paramètre car $1 est interprété et que $1 est vide" m'avait paru obcsure au premier abord ; le fait "vide/non vide" ayant peu de rapport avec la cause du problème. Par exemple si $1 n'avait pas été vide, le code sql n'aurait quand-même pas été correct (sauf si $1 avait contenu la chaine "$1" ).
    Ensuite, avec le recul et une relecture plus attentive des exemples j'ai mieux compris l'idée que tu cherchais à faire passer...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Script de chargement de base dans QLIKVIEW
    Par Chaviro dans le forum QlikView
    Réponses: 5
    Dernier message: 29/01/2015, 14h28
  2. Prise en compte des schemas dans postgresql
    Par loljak dans le forum MkFramework
    Réponses: 9
    Dernier message: 18/12/2014, 13h08
  3. Réponses: 2
    Dernier message: 17/06/2013, 09h18
  4. Filtre dans le script de chargement
    Par StephBe dans le forum QlikView
    Réponses: 1
    Dernier message: 12/11/2012, 08h26
  5. Calcul dans le script de chargement
    Par meumeu73.1 dans le forum QlikView
    Réponses: 1
    Dernier message: 09/02/2011, 13h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo