Le site des développeurs francophones APEX - Oracle Application Express
Vous n'êtes pas identifié(e).
Bienvenue sur le forum Oracle APEX
S'il s'agit de votre première visite, nous vous invitons à consulter la FAQ en cliquant sur le lien ci-dessous. Vous pouvez poster ici toutes vos questions sur l'installation, le développement (composants clients et serveurs), l'administration des instances Oracle APEX. Par ailleurs, ce forum diffuse les annonces et actualités relatives à Oracle APEX.
Oracle APEX 4.1
Oracle APEX 4.1 est disponible depuis le 24 août 2011.
Oracle APEX 4.0
Oracle APEX 4.0 est disponible depuis le 23 juin 2010. Il existe 2 distributions, une distribution en langue anglaise uniquement et une distribution multilingue.
Pages :: 1
Bonjour,
Comme je l'ai dis dans un précédent message je débute sous APEX et je m'y perd un peu...
J'essaye d'afficher une liste suivant des infos renseignées par l'utilisateur au préalable cependant lorsque je met ce bout de code dans la source de ma région j'ai l'erreur :
"La requête ne peut pas être analysée, vérifiez-en la syntaxe. (ORA-20001: Query must begin with SELECT or WITH) ".
Quelqu'un pourrait il m'expliquer la démarche à suivre ou l'erreur ?
DECLARE
l_selected APEX_APPLICATION_GLOBAL.VC_ARR2;
requete vachar2(4000);
BEGIN
l_selected := APEX_UTIL.STRING_TO_TABLE(:P_RECENCE);
--
-- On boucle sur les récences
--
FOR i IN 1..l_selected.count
LOOP
if requete is null then
requete := l_selected(i);
else
requete := ','||l_selected(i);
end if;
END LOOP;
return 'select
numcli as Numéro,
codesexe as Sexe,
nom as Nom,
prenom as Prénom,
dept as Dpt,
ad1 as Adr1,
ad2 as Adr2,
pays as Pays,
tel as Tél,
email as Email,
statucli as Statut,
recence as Récence
from :P_NOM_TABLE
where recence in (requete)';
END;Merci
Hors ligne
Ta requête ne peut pas fonctionner, en mettant entre quote ta requête SQL, le moteur SQL n'interprète pas les variables :P_NOM_TABLE et requete.
voici ce qu'il faut faire :
return 'select
numcli as Numéro,
codesexe as Sexe,
nom as Nom,
prenom as Prénom,
dept as Dpt,
ad1 as Adr1,
ad2 as Adr2,
pays as Pays,
tel as Tél,
email as Email,
statucli as Statut,
recence as Récence
from' || :P_NOM_TABLE ||
'where recence in (' || requete || ')';
Hors ligne
Merci mais l'erreur est toujours présente ![]()
Hors ligne
Il faut corriger la boucle LOOP comme ceci :
FOR i IN 1..l_selected.count
LOOP
if requete is null then
requete := l_selected(i);
else
requete := requete || ',' || l_selected(i);
end if;
END LOOP;
J'attire ton attention sur la variable requete, elle risque d'être mal interprétée. Si la liste est composée de chaines de caractères,
le moteur SQL risque de considérer son contenu comme une seule chaîne et non pas comme une liste. Pour cela il faut séparer par des quotes
chaque élément de la liste.
Le message Query must begin with SELECT or WITH s'affiche lorsqu'il y a un problème de syntaxe SQL, essaie de tester ta requête
soit dans SQL Developer soit dans SQL Command d'APEX pour voir la requête générée.
Hors ligne
Merci pour l'aide, effectivement je n'avais pas pensé aux quotes...
Cependant je ne sais pas comment fonctionne réellement apex mais à ce niveau là le bout de code n'est pas exécuté si ? Donc l'erreur doit provenir d'une ligne qui ne peut être exécuté je pense.
Ma requête générale fonctionne correctement :
select
numcli as Numéro,
codesexe as Sexe,
nom as Nom,
prenom as Prénom,
dept as Dpt,
ad1 as Adr1,
ad2 as Adr2,
pays as Pays,
tel as Tél,
email as Email,
statucli as Statut,
recence as Récence
from ITL11
where recence in ('06', 'P24');Et voici ma source pour le moment...
DECLARE
l_selected APEX_APPLICATION_GLOBAL.VC_ARR2;
requete vachar2(4000);
BEGIN
--
-- Convert the colon separated string of values into
-- a PL/SQL array
l_selected := APEX_UTIL.STRING_TO_TABLE(:P_RECENCE);
--
-- Loop over array to insert department numbers and sysdate
--
FOR i IN 1..l_selected.count
LOOP
if requete is null then
requete := chr(39)||l_selected(i)||chr(39)||;
else
requete := requete || ',' || chr(39)|| l_selected(i)||chr(39)||;
end if;
END LOOP;
return 'select
numcli as Numéro,
codesexe as Sexe,
nom as Nom,
prenom as Prénom,
dept as Dpt,
ad1 as Adr1,
ad2 as Adr2,
pays as Pays,
tel as Tél,
email as Email,
statucli as Statut,
recence as Récence
from' || :P_NOM_TABLE ||
'where recence in (' || requete || ')';Hors ligne
Salut,
les "Interractive reports" n'acceptent que des sources de type SQL, pas de PL/SQL.
Il faut donc que tu trouves un moyen de faire ça directement avec une requête, ou alors utiliser un report simple.
Hors ligne
Merci pour cette précision, je vais donc stocker les valeurs sélectionnées dans une item caché (si c'est possible
) afin de ne faire que du SQL pour mon report.
Encore merci.
Hors ligne
bonjour Apocalypse comme le dit Yann pas de pl/sql pour les IR par contre j'ai ici un tutoriel qui devrait t'interresser
Oracle APEX Interactive report based on PLSQL function (c'est basé sur une collection Apex)
http://www.oracleapplicationexpress.com/tutorials/71
la doc Apex pour les collections
http://download.oracle.com/docs/cd/E239 … m#AEAPI531
Cordialement
Jean-Yves
Dernière modification par ic4it (2011-09-06 19:51:17)
Hors ligne
Merci ic4it pour les liens
.
Cependant je n'arrive pas à utiliser la collection avec ma méthode de nom de table définie dynamiquement...
Voici mon code
APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY(
'REQ_COMPT',
'select
numcli as Numéro,
codesexe as Sexe,
nom as Nom,
prenom as Prénom,
dept as Dpt,
ad1 as Adr1,
ad2 as Adr2,
pays as Pays,
tel as Tél,
email as Email,
statucli as Statut,
recence as Récence
from '|| :P_NOM_TABLE);Et du coup j'ai cette erreur lors de l'exécution:
ORA-00903: invalid table name
Hors ligne
Merci pour cette précision, je vais donc stocker les valeurs sélectionnées dans une item caché (si c'est possible
) afin de ne faire que du SQL pour mon report.
Encore merci.
Je ne peux même pas utiliser cette méthode car le nom de ma table est stocké dans un item et ceci ne fonctionne pas:
from :P_NOM_TABLE;Hors ligne
J'ai finalement réussi à utiliser la collection, merci à tous pour l'aide!
Hors ligne
Ah non fausse alerte j'ai toujours le problème
ORA-20104: create_collection_from_query Error:ORA-20104: create_collection_from_query ParseErr:ORA-00903: invalid table name
Quelqu'une peut il me guider ?
declare
l_query varchar2(4000);
begin
l_query := 'select
numcli as Numéro,
codesexe as Sexe,
nom as Nom,
prenom as Prénom,
dept as Dpt,
ad1 as Adr1,
ad2 as Adr2,
pays as Pays,
tel as Tél,
email as Email,
statucli as Statut,
recence as Récence
from '||:P_TABLE_VALIDER||' '||:P3_REQUETE;
--APEX_COLLECTION.DELETE_COLLECTION('REQ_COMPT');
APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY(
'REQ_COMPT',
l_query);
end;Hors ligne
Bonjour,
Le problème vient de l'item :P3_REQUETE, il doit être mal formé. Si je comprend bien il doit traduire la sélection de l'utilisateur clause Where ... etc..
Sinon ton bloc anonyme est correct.
Vérifie le contenu de l'item :P3_REQUETE, tu verras plus clair.
Hors ligne
Merci je vais faire ça mais moi je pense plutôt que le problème vient de mon item :P_TABLE_VALIDER car à la fin du message d'erreur il est écrit :
ORA-00903: invalid table name
Je te tiens au courant dans la journée ![]()
Hors ligne
J'ai réussi à corriger le problème
.
Cependant mon report interactif ne se rafraichit pas automatiquement lorsque j'arrive sur la page, il faut que je raffraichisse la page pour que les informations correspondent...
Quelqu'un sait il pourquoi ?
Hors ligne
Pages :: 1