GOOGLE ADS

dimanche 1 mai 2022

Échec de la requête SQL Oracle DB

Problème avec une requête SQL.

La requête est la suivante :

SELECT employee_id,
last_name,
first_name,
TO_DATE('31-DEC-01') - hire_date as "days_with_company",
salary*12 as "annual_salary",
(CASE WHEN "days_with_company" < 720 THEN "annual_salary"*0.1
WHEN "days_with_company" >= 720 AND "days_with_company" < 1440 THEN "annual_salary"*0.2
ELSE "annual_salary"*0.3 END) as "bonus",
("annual_salary" + "bonus") as "total_compensation"
FROM employees;

Mais j'obtiens l'erreur suivante:

ORA-00904: "bonus": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 9 Column: 28

Lorsque je recherche l' erreur, il ne semble pas que je fasse quelque chose de mal !

S'il vous plaît donnez votre avis.


Solution du problème

"bonus" est généré dans la même instruction SQ dans laquelle vous essayez de l'utiliser. ("annual_salary" + "bonus") comme "total_compensation" Ce n'est pas autorisé. Ce qui suit le sépare dans une instruction select distincte.

WITH
aset
AS
(SELECT employee_id
, last_name
, first_name
, TO_DATE ('31-DEC-01') - hire_date AS "days_with_company"
, salary * 12 AS "annual_salary"
, (CASE
WHEN "days_with_company" < 720
THEN
"annual_salary" * 0.1
WHEN "days_with_company" >= 720
AND "days_with_company" < 1440
THEN
"annual_salary" * 0.2
ELSE
"annual_salary" * 0.3
END) AS "bonus"
FROM employees)
SELECT aset.*, ("annual_salary" + "bonus") AS "total_compensation"
FROM aset;

Et je réfléchirais à deux fois avant de placer tous les noms de colonnes entre guillemets doubles. Utilisez simplement la valeur par défaut d'Oracle. Oracle traite les noms d'objets en majuscules lorsqu'ils ne sont pas entre guillemets doubles, quelle que soit la casse. C'est simple, direct et élimine beaucoup d'agonie lorsque des cas mixtes se glissent.

Aucun commentaire:

Enregistrer un commentaire

Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique&nbsp;?

Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...