Plantage sur l’exécution d'une requête à distance

RPG (3 et 4, free), CL, SQL, etc...
Répondre
N1kos
Messages : 34
Enregistré le : ven. 08 févr. 2013, 09:41:45

Plantage sur l’exécution d'une requête à distance

Message par N1kos »

Bonjour,

J'ai actuellement un problème sur le fonctionnement d'une requête SQL dans une sous-procédure.

La sous-procédure possède un curseur qui parcours une table SQL provenant d'un système distant (Instance.BDD.Table) AS/400.

L’exécution du curseur fonctionne correctement avec la syntaxe suivante:

Code : Tout sélectionner

SELECT NACT
FROM INSTANCE.BBD.TABLE
WHERE CSOC = 'BLABLA'
FOR UPDATE OF NACT WITH NC
Mais lors de l'update la requête avec la syntaxe suivante me retourne une erreur "SQL-084" (j'éxécute la requête à partir d'un "execute immediate"):

Code : Tout sélectionner

UPDATE INSTANCE.BBD.TABLE                                                                      
SET NACT = 987                                                      
WHERE CURRENT OF cNM

Pour information le sous-programme fonctionne très bien en local, mais en accès distant ça plante sur le update, très certainement à cause du

Code : Tout sélectionner

WHERE CURRENT OF cNM 
Merci par avance de votre aide si vous avez déjà rencontré le problème et trouvé une solution.
N1kos

cmasse
Site Admin
Messages : 813
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

UPDATE sur une dénomination en 3 parties

Message par cmasse »

Bonjour,

vous utilisez la dénomination en 3 parties -> "machine.schema.table"

à ma connaissance cette syntaxe n'est admise que sur les ordres

Code : Tout sélectionner

SELECT * from machine.schema.table
et INSERT

Code : Tout sélectionner

INSERT INTO TABLELOCALE (SELECT * from machine.schema.table )
pas les ordre UPDATE, pour ce dernier il faut utiliser CONNECT TO, puis UPDATE
Christian Massé (Volubis.fr)

N1kos
Messages : 34
Enregistré le : ven. 08 févr. 2013, 09:41:45

(sans texte)

Message par N1kos »

Bonjour,

L'update fonctionne correctement avec la dénomination en 3 parties, je l'utilise dans le même programme sans aucun problème(c'est bien pratique).

J'ai toutefois trouvé une solution pour corriger le problème.

En effet, il faut que je remplace le:

Code : Tout sélectionner

WHERE CURRENT OF MonCurseur
Par les conditions de sélection de mon curseur:

Code : Tout sélectionner

WHERE COL1 = VAR1 AND COL2 = VAR2 ...
Avec cette syntaxe ça fonctionne.

Après je ne sais pas si le problème provient du "EXECUTE IMMEDIATE" ou bien du "WHERE CURRENT OF MonCurseur" sur une machine distante mais si ça fonctionne c'est déjà ça.

Merci pour votre réponse.
N1kos

cmasse
Site Admin
Messages : 813
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

UPDATE sur une dénomination en 3 parties

Message par cmasse »

Super si l'UPDATE fonctionne sur une dénomination en 3 parties, ce n'était pas documenté comme ça.
Christian Massé (Volubis.fr)

N1kos
Messages : 34
Enregistré le : ven. 08 févr. 2013, 09:41:45

(sans texte)

Message par N1kos »

Je ne suis pas certains à 100% mais il me semble qu'il est même possible d'utiliser des syntaxe comme "CREATE TABLE" ou "CREATE VIEW" etc ... sur machine distante.
N1kos

cmasse
Site Admin
Messages : 813
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

create table

Message par cmasse »

Effectivement, je confirme. Ce code fonctionne et créé bien la table

Code : Tout sélectionner

create table i5test.qgpl.test
(zone1 dec(6 , 0) as identity, 
 zone2 char(25)                
)                
Christian Massé (Volubis.fr)

Répondre