我是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;
答案 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消息进入脚本输出窗口。