2017-10-16 1 views
0

Je crée un rapport classique (basé sur la fonction) avec le code suivant:erreur Oracle APEX ORA-01460 ORA-02063

declare 
    q long; 
begin 
-- The query with any conditions always applied 
    q := 'select * from name_selection_atnd where 1 = 1'; 

-- If all items are null then kill query 
if :P500_FN is null 
    and :P500_LN is null 
then 
    q := q || ' and name_said = 0'; --will always return 0 rows 
end if; 

-- Append any optional conditions 
if :P500_FN is not null then 
    q := q || ' and name_first_name = :P500_FN'; 
end if; 

if :P500_LN is not null then 
    q := q || ' and name_last_name = :P500_LN'; 
end if; 

return q; 
end; 

Mon code final devra contenir d'autres éléments à rechercher en plus premier et dernier nom mais pour l'instant je teste avec juste ces deux paramètres. Lorsque je ne remplis qu'un prénom, la recherche fonctionne. Quand je remplis seulement un nom de famille, cela fonctionne. Lorsque je tape un prénom et un nom, j'obtiens l'erreur ORA-01460 et ORA-02063.

Que pourrais-je faire de mal?

+0

Qu'est-ce que vous entrez pour 'P500_FN'. pourquoi utilisez-vous la variable de liaison partout. Utilisez une seule fois dans declare pour obtenir la valeur de bind variable dans une variable locale. faire des comparaisons sur ces variables. –

+0

Je tape une chaîne. Juste le prénom d'une personne –

+0

Pouvez-vous donner les messages d'erreur complets plutôt que les codes? – MT0

Répondre

1

Je peux voir que vous avez utilisé bind variables à l'intérieur '' qui seraient jamais évalués dans un bloc de PLSQL:

q := q || ' and name_first_name = :P500_FN'; 

Cela devrait être comme ça :

q := q || ' and name_first_name = '||:P500_FN; 
+0

Great! Mais maintenant, si je tape un nom comme 'Jordan' j'obtiens cette erreur ORA-00904: "JORDAN": identifiant invalide –

+0

@JordanHolmer Vous devez passer 'Jordan' comme une chaîne de caractères, donc il doit être en '' Jordanie '' quand vous le passez. vous devez inclure des guillemets simples (') lorsque vous transmettez des valeurs. – XING

+0

Merci! Je l'ai fait fonctionner maintenant –

0

Vous n'avez pas besoin SQL dynamique:

SELECT * 
FROM name_selection_atnd 
WHERE (:P500_FN IS NULL OR name_first_name = :P500_FN) 
AND (:P500_LN IS NULL OR name_last_name = :P500_LN) 
AND (:P500_FN IS NOT NULL OR :P500_LN IS NOT NULL); 
+0

Je reçois les mêmes erreurs quand je fais cela –