任何人都可以从垃圾场帮助我解决这个问题吗? [关闭]

Posted

技术标签:

【中文标题】任何人都可以从垃圾场帮助我解决这个问题吗? [关闭]【英文标题】:can any one help me on this from dumps? [closed] 【发布时间】:2013-07-28 23:24:53 【问题描述】:

查看附件 1 并检查员工表的结构:

desc employees
Name                           Null     Type
-------------------------------------------------
EMPLOYEE_ID                    NOT NULL NUMBER(6)
FIRST_NAME                              VARCHAR2(20)
LAST_NAME                      NOT NULL CHAR(25)
EMAIL                          NOT NULL VARCHAR2(25)
PHONE_NUMBER                            VARCHAR2(20)
HIRE_DATE                      NOT NULL DATE
JOB_ID                         NOT NULL VARCHAR2(10)
SALARY                                  NUMBER(8,2)
COMMISSION_PCT                          NUMBER(2,2)
MANAGER_ID                              NUMBER(6)
DEPARTMENT_ID                           NUMBER(4)

查看附件 2 并检查代码:

CREATE OR REPLACE FUNCTION increase
    (emp_num NUMBER) RETURN NUMBER
IS
  inc_amt NUMBER;
  sal     NUMBER;
BEGIN
  SELECT salary INTO sal FROM employees WHERE employee_id = emp_num;

  inc_amt := sal*10;
  RETURN inc_amt;

END increase;
/

CREATE OR REPLACE PROCEDURE calc_sal IS
  emp_num NUMBER(7) := 120;
  amt     NUMBER    :=0;

  PROCEDURE raise_salary
    (emp_id NUMBER)
  IS
  BEGIN
    amt := increase(emp_num);

    UPDATE employees SET salary = salary+amt WHERE employee_id=emp_id;  
  END raise_salary;

BEGIN
  raise_salary(emp_num);
END calc_sal;
/  

代码执行的结果是什么?

A.调用时,两个块都编译并执行成功。

B. 两个块都编译成功,但 CALC_SAL 过程在执行时出错。

C.CALC_SAL 过程在编译时出错,因为 amt 变量应该在 RAISE_SALARY 过程中声明。

D.CALC_SAL 过程在编译时出错,因为 RAISE_SALARY 过程不能调用独立的增加函数。

我选择 B 是因为我编译了函数和过程并且它编译成功,但是我尝试调用(执行)过程 calc_sal 并且它给了我错误。

你能解释一下这个错误的原因是什么,我的答案是正确的还是错误的?因为在转储中,答案是 A

我使用此代码调用该过程:

begin
calc_sal;
end;

我得到的错误:

Error report:
ORA-01438: value larger than specified precision allowed for this column
ORA-06512: at "HR.CALC_SAL", line 7
ORA-06512: at "HR.CALC_SAL", line 11
ORA-06512: at line 2
01438. 00000 -  "value larger than specified precision allowed for this column"
*Cause:    When inserting or updating records, a numeric value was entered
           that exceeded the precision defined for the column.
*Action:   Enter a value that complies with the numeric column's precision,
           or use the MODIFY option with the ALTER TABLE command to expand
           the precision.

和employee_id列有107个员工,他们的编号从100到206。

【问题讨论】:

@Bob Jarvis 能否请您解释一下这个问题 产生了什么错误? 请编辑您的帖子并包含您为调用 CALC_SAL 而编写的代码。 EMPLOYEE_ID = 120 的 EMPLOYEES 表中有哪些数据?谢谢。 @BobJarvis 我编辑了代码。 这个问题似乎跑题了,因为在多项选择测试中查询答案(认证骗子?)。这不是编程主题。 【参考方案1】:

由于 Bob 的 cmets 状态正确,代码确实可以正常工作,因此测验答案 A 是有根据的。

您说 B 是因为您收到此错误:

ORA-01438: 值大于允许的指定精度 专栏

这是一个数据问题。函数 CALC_SAL() 将成功提供SAL + SAL*10 NUMBER(8,2) 的列。所以要么你的表没有按照你想象的方式定义,要么员工的原始工资比你想象的要高。

【讨论】:

感谢@Bob Jarvis 的解释 感谢@APC 的解释

以上是关于任何人都可以从垃圾场帮助我解决这个问题吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

任何人都可以帮助从 FirebaseDatabase 获得 2 级深度字典吗?

有人可以帮助解决这种重复关系吗? [关闭]

任何人都可以帮助我处理 JQuery 动画吗?

任何人都可以帮助我解决此代码中在 Java swing 中显示 PDF 的错误吗?

如何使用 php 或 xml 创建博客 [关闭]

JSF过滤器在初始重定向后不重定向[关闭]