SQL请求一个数字并显示>比数量

时间:2017-08-05 23:59:34

标签: sql oracle11g oracle-sqldeveloper sqlplus

我是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;

1 个答案:

答案 0 :(得分: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会显示错误消息并再次提示。

如果您将脚本简化为:

accept MoneyPlease number prompt 'Money Please '

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

然后如果你通过SQL * Plus运行它并给出一个非数字值,你只需重新提示输入一个数字:

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消息进入脚本输出窗口。