Utilisation de variables dans PLSQL instruction SELECT
J'ai une question qui interroge sur ReportStartDate et ReportEndDate j'ai donc pensé que je pourrais utiliser des variables dans PLSQL. Pas sûr de ce que je suis en manque ici, mais j'obtiens une erreur:
CLEAR;
DECLARE
varReportStartDate Date := to_date('05/01/2010', 'mm/dd/yyyy');
varReportEndDate Date := to_date('05/31/2010', 'mm/dd/yyyy');
BEGIN
SELECT
'Value TYPE',
1 AS CountType1,
2 AS CountType2,
3 AS CountType3
FROM DUAL;
SELECT COUNT (*)
FROM CDR.MSRS_E_INADVCH
WHERE 1=1
AND ReportStartDate = varReportStartDate
AND ReportEndDate = varReportEndDate
;
END;
/
L'Erreur est:
Error starting at line 2 in command:
Error report:
ORA-06550: line 6, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement
ORA-06550: line 8, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
Ce qui se passe en Crapaud ainsi que dans SQL Developer.
Quelle est la bonne façon d'utiliser les variables dans ma clause where?
OriginalL'auteur Raj More | 2010-11-29
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser les instructions SQL directement dans une PL/SQL bloc ( sauf si vous utilisez
EXECUTE IMMEDIATE
). Les colonnes doivent être récupérés dans des variables ( qui est ce que PL/SQL est vous dire avecPLS-00428: an INTO clause is expected in this SELECT statement
d'erreur). Donc, vous allez avoir à réécrire à vos relevés de compte ci-dessous.Assurez-vous d'ajouter des Gestionnaires d'Exception, depuis PL/SQL s'attend à seulement 1 ligne pour être retourné. Si la requête ne renvoie aucune ligne, vous serez frappé un
NO_DATA_FOUND
exception - et si l'état récupère un trop grand nombre de lignes, vous serez frappé unTOO_MANY_ROWS
exception.OriginalL'auteur Sathyajith Bhat
La question à laquelle vous devez répondre est ce que vous voulez ne avec les données qui ont été sélectionnés?
Sathya vous a donné une approche - déclarer des variables dans votre PL/SQL bloc et sélectionnez les colonnes
INTO
ces variables. À noter que cela nécessite que l'instruction SELECT retourne exactement une ligne plus ou moins de lignes lèvera une erreur. Une autre solution est de déclarer les types de collection à l'aide de l'essentiel de RECUEILLIR option: http://oracletoday.blogspot.com/2005/11/bulk-collect_15.htmlEncore une autre option est d'avoir la procédure de retour d'un curseur. Ceci est utile dans le cas où le code d'appel s'attend à être en mesure de récupérer les données que la procédure a sélectionné:
OriginalL'auteur Dan