2017-08-05 30 views
-4

我是新来的SQL和我下面的问题来完成:SQL询问了一些和显示器>比数

编写SQL代码来要求一个数字,显示谁赚 所有员工佣金超过所提供的数量。提示应该说“请钱”。

所以先声明我是:

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

但因为一旦你给了MoneyPlease值则保持,如果我输入文字就出错了这个只能使用一次,而且。

所以我试图让它在每次运行时提示一个值,将它转换为数字,如果输入非数字参数,则调出。

下面是我到目前为止,我已经尝试过移动组件,例如将选择组合到一行,并将窗体组合到一行。但是无论我做出什么样的改变,我都会收到错误信息,而且我不太清楚哪些信息意味着我正朝着正确的方向前进。感觉更像是我现在只是在黑暗中刺伤。

任何方向将不胜感激。

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中会发生同样的情况,但提示输入值是弹出对话框,并且SP-0425消息进入脚本输出窗口。