2011-05-16 1 views
1

Je convertis une procédure stockée dans certains logiciels que je gère de SQL Server SQL à Informix SQL et les problèmes sont nombreux. Fondamentalement, je convertis chaque section ligne par ligne jusqu'à ce que j'ai tout converti.Impossible d'ajouter une commande ORDER BY à une procédure stockée

Je donne les résultats suivants CREATE PROCEDURE:

CREATE PROCEDURE ifxdbase:dc_buildSP (WorkID INT, CompNo smallint) 
CREATE TEMP TABLE Items 
(
    Code smallint, 
    Qty int, 
    Total int 
); 

INSERT INTO Items 
SELECT 
    tblDetails.code, 
    tblDetails.quantity, 
    tblHead.quantity 
FROM 
    tblHead 
INNER JOIN tblDetails ON (tblDetails.compno = tblDetails.compno AND tblDetails.id_num = tblHead.id_num) 
WHERE tblHead.compno = CompNo AND tblHead.id_num = WorkID; 
--ORDER BY tblDetails.code; 

DROP TABLE Items; 
END PROCEDURE 

En l'état actuel, cela fonctionne très bien, mais quand je décommentez la ligne --ORDER BY tblDetails.seqno; (et supprimer le point-virgule de la ligne précédente) je reçois un « -201 Une syntaxe erreur s'est produite "erreur.

Fondamentalement tblHead est une série d'en-têtes d'ordre et tblDetails est un tableau des détails de chacun de ces ordres. Sélectionner et joindre les données fonctionne bien, essayer de les commander échoue.

commande devrait fonctionner avec quoi que ce soit à partir du SELECT original, IIRC, donc je ne vois pas ce qui pourrait aller mal, ici ...

+0

Pourquoi avez-vous besoin d'une commande par lors de l'insertion des données dans une table? –

+1

le problème n'est pas la procédure stockée, le problème est qu'un ORDER BY clausule n'est pas autorisé dans un INSERT INTO .... SELECT construction – Doliveras

Répondre

4

Comme indiqué here:

.... toutes les clauses et options de l'instruction SELECT sont disponibles pour que vous pouvez utiliser dans une requête au sein d'une instruction INSERT . SELECT clauses et les options suivantes ne sont pas pris en charge par Informix dans une instruction INSERT:

FIRST et EN TEMP

ORDER BY et UNION

si ORDER BY est pas pris en charge dans la commande INSERT dans Informix.

Je n'ai pas quelque chose à tester en ce moment, mais vous pouvez essayer quelque chose comme ça, comme une solution de contournement:

INSERT INTO Items 
SELECT code, dQuantity, hQuantity 
    FROM (
    SELECT 
    tblDetails.code, 
    tblDetails.quantity dQuantity, 
    tblHead.quantity hQuantity 
    FROM 
    tblHead 
    INNER JOIN tblDetails ON (tblDetails.compno = tblDetails.compno AND tblDetails.id_num = tblHead.id_num) 
    WHERE tblHead.compno = CompNo AND tblHead.id_num = WorkID; 
    ORDER BY tblDetails.code 
); 
+1

D'accord, assez juste. Cela fonctionne dans SQL Server. Comme mentionné par Lieven ci-dessus, il n'y a pas vraiment de bonne raison pour qu'il y ait une commande de toute façon. Merci pour votre référence de documentation et suggestion de solution de contournement. – Frosty840

Questions connexes