2010-03-18 6 views
1

J'essaye de faire une opération d'insertion en utilisant iBatis. La requête de sélection interne échoue toujours et renvoie la valeur NULL.ibatis/Oracle - La requête SELECT dans INSERT échoue

INSERT INTO SCHEMA.TABLE 
     (FIELD1, 
     FIELD2, 
     FIELD3) 
    VALUES 
     (#field1#, 
      (SELECT 
       ANOTHER_FIELD 
      FROM 
       SCHEMA.TABLE 
      WHERE 
       FIELD4= #field2#), 
     #field2#) 

Mais si je remplace # field2 # par la valeur réelle uniquement dans la requête interne, cela fonctionne correctement. Pourquoi iBatis ne substitue-t-il pas les valeurs de champs dans les innercheries?

Des idées?

Répondre

3

de la manière suivante à l'aide d'un seul sous-requête et en omettant le mot-clé VALUES travaillerait avec Oracle, s'il vous plaît essayer avec iBatis:

INSERT INTO SCHEMA.TABLE 
    (FIELD1, 
    FIELD2, 
    FIELD3) 
    (
     SELECT 
      #field1#, 
      ANOTHER_FIELD, 
      #field2# 
     FROM 
      SCHEMA.TABLE 
     WHERE 
      FIELD4= #field2# 
    ) 
+0

Remarque: les parenthèses autour du SELECT sont facultatives. –

1

Cette syntaxe est valide pour Oracle. Essayez ce qui suit:

INSERT INTO SCHEMA.TABLE 
    (FIELD1, 
    FIELD2, 
    FIELD3) 
    SELECT 
     #field1#, 
     ANOTHER_FIELD, 
     #field2# 
    FROM 
     SCHEMA.TABLE 
    WHERE 
     FIELD4= #field2#