【问题标题】:SQL Ask for a number and display > than numberSQL 请求一个数字并显示 > 比数字
【发布时间】:2018-01-13 14:35:12
【问题描述】:

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

【问题讨论】:

  • 这是家庭作业——如果你不知道这个级别,你应该问你的教授。
  • 我正在检查考试样题
  • 第一:您使用的是哪个 RDBMS?您已经标记了 oracle 和 sql-server。不可能两者兼而有之。请修复您的标签
  • 下一步:您应该在应用层验证您的输入,只有在正确时才将其发送到数据库级别
  • @POD -- 这是我的观点 -- 这是一个示例问题 -- 如果您不知道如何回答,请咨询您的教授。我们不知道,我们没有上课。所写的问题毫无意义。

标签: sql oracle11g oracle-sqldeveloper sqlplus


【解决方案1】:

Oracle 没有内置的numeric() 函数,并且该查询未正确完成- 它以逗号而不是分号结尾。在具有默认设置(特别是 sqlblanklines 默认为 off)的 SQL*Plus 中,该查询被静默忽略;是 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 中也会发生同样的事情,但提示 for value 是一个弹出对话框,并且 SP-0425 消息进入脚本输出窗口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    相关资源
    最近更新 更多