2017-08-05 4 views
-4

Je suis nouveau à SQL et j'ai la question suivante à compléter:SQL Demandez un numéro et affichage> que le nombre

Recopiez le code SQL pour demander un numéro et afficher tous les employés qui gagnent plus de commission que le nombre fourni. L'invite devrait dire "argent s'il vous plaît".

La première déclaration que j'ai est:

SELECT E.ENAME, E.COMM 
    FROM EMP E 
WHERE e.comm > &MoneyPlease; 

Mais cela ne fonctionne qu'une fois, car une fois que vous avez donné la valeur pour MoneyPlease elle est maintenue, et si j'entrer du texte il des erreurs sur. Donc j'essaye de l'obtenir pour demander une valeur chaque fois qu'il est couru, le convertit en nombre, appelle si un paramètre non numérique est entré. Ci-dessous ce que j'ai jusqu'à présent, j'ai essayé de déplacer des composants, par exemple en combinant les sélections à une ligne, et les formes à une ligne. Mais je continue d'obtenir des erreurs, peu importe les changements que je fais, et je ne suis pas assez familier pour savoir lesquelles signifient que je suis au moins dans la bonne direction. Je me sens plus comme si je prenais des coups dans l'obscurité à ce moment-là.

Toute direction serait appréciée.

Accept MoneyPlease prompt 'Money Please ' 
Column MoneyPlease NEW_Value MoneyPlease 

select nvl(numeric('&MoneyPlease'), '*Unknown*') MoneyPlease 
    from Dual, 

Prompt 'Is this correct?' 

Prompt 'Enter to continue, CTRL + C to esc' 

Pause 

SELECT E.ENAME, E.COMM 
    FROM EMP E 
WHERE e.comm > &MoneyPlease; 
+2

Ceci est un travail à domicile - si vous ne connaissez pas à ce niveau, vous devriez demander à votre professeur. – Hogan

+0

Je passe en revue des exemples de questions pour un examen – POD

+0

Premièrement: Quels SGBDR utilisez-vous? Vous avez étiqueté à la fois Oracle et SQL Server. Cela ne peut pas être les deux. S'il vous plaît corriger vos balises –

Répondre

0

Oracle n'a pas intégré numeric() fonction, et cette requête n'est pas terminée correctement - il se termine par une virgule au lieu d'un point-virgule. Dans SQL * Plus avec les paramètres par défaut (en particulier sqlblanklines par défaut à off) cette requête est simplement ignorée silencieusement; est SQL Developer (ou avec set sqlblanklines on) le reste du script est traité dans le cadre de cette même requête, qui se termine par ORA-00933: SQL command not properly ended.

Les deux clients comprennent accept, que vous utilisez déjà, mais comprennent aussi la restriction de type de données number:

NUM [BER]

Makes la variable un type de données NUMBER. Si la réponse ne correspond pas au type de données, ACCEPT donne un message d'erreur et vous invite à nouveau.

Si vous simplifiez votre script:

accept MoneyPlease number prompt 'Money Please ' 

SELECT E.ENAME, E.COMM 
    FROM EMP E 
WHERE e.comm > &MoneyPlease; 

alors si vous exécutez que grâce à SQL * Plus et donner une valeur non-numérique vous obtenez juste réinvité pour un certain nombre:

SQL> @your_script 

Money Please abc 
SP2-0425: "abc" is not a valid NUMBER 
Money Please 123 
old 3: WHERE e.comm > &MoneyPlease 
new 3: WHERE e.comm >  123 
... -- query results 

Dans SQL Developer, la même chose se produit, mais l'invite de la valeur for est une boîte de dialogue contextuelle et le message SP-0425 s'affiche dans la fenêtre de sortie du script.