2017-08-05 11 views
-4

より数や表示>を求めます提供された数よりも多くの手数料。プロンプトは「お金でお願いします」と言うべきです。SQL私はSQLに新たなんだと私は完了するには、次の質問をした数

だから私が持っている最初の文は次のとおりです。

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

しかし、あなたはMoneyPleaseの値を与えた後、それが保たれているので、私は、テキスト、それエラーを入力した場合、これは一度だけ動作します。

私はそれが実行されるたびに値の入力を求め、数値に変換し、非数値のパラメータが入力された場合に呼び出します。

以下は私がこれまで行ってきたことです。たとえば、選択を1行にまとめ、フォームを1行にまとめるなど、コンポーネントの移動を試みました。しかし、私はどのような変更を加えても間違いを犯し続けています。私は、どちらが正しい方向にリースしているのかを知るのに十分なほどよく知られていません。私はちょうどこの時点で暗闇の中でスタブを取っているように感じる。

いずれの方向にも感謝します。

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

これは家事です。あなたがこのレベルを知らなければ、教授に尋ねるべきです。 – Hogan

+0

試験のサンプルの質問を受けています – POD

+0

最初に:どのRDBMSを使用していますか? oracleとsql-serverの両方にタグを付けました。それは両方になることはできません。あなたのタグを修正してください –

答えて

0

は、Oracleは内蔵していませんnumeric()機能、およびそのクエリが正常に完了していない - それは代わりにセミコロンをカンマで終わります。 SQL * Plusでは、デフォルト設定(具体的にはsqlblanklinesがデフォルトでoffに設定されています)では、その問合せは暗黙的に無視されます。 SQL Developer(またはset sqlblanklines on)の場合、残りのスクリプトは同じクエリの一部として扱われ、最終的にORA-00933: SQL command not properly endedとなります。

両方のクライアントがすでに使用しているacceptを、理解するだけでなく、numberデータ型の制限を理解する:

NUM [BER]

は、変数NUMBERデータ型にします。応答がデータ型と一致しない場合、ACCEPTはエラーメッセージを返し、再度プロンプトを出します。

あなたはにスクリプトを簡素化する場合:SQL * Plusを通過ことを実行して、あなただけの数のための再入力を求めます非数値与えるならば、

accept MoneyPlease number prompt 'Money Please ' 

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

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 

SQL Developerでも同じことが起こりますが、forの値のプロンプトはポップアップダイアログであり、SP-0425メッセージはスクリプト出力ウィンドウに入ります。

関連する問題