2013-07-28 2 views
0

보기 전시 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. amt 변수가 RAISE_SALARY 프로 시저에서 선언되어야하기 때문에 CALC_SAL 프로 시저가 컴파일시 오류를 제공합니다.

D. RAISE_SALARY 프로 시저가 독립형 증가 함수를 호출 할 수 없기 때문에 CALC_SAL 프로시 저는 컴파일시 오류를 제공합니다.

함수와 프로 시저를 컴파일하고 sucssfully 컴파일했기 때문에 B를 선택했으나 calc_sal 프로 시저를 호출하여 오류가 발생했습니다.

당신은 나에게이 오류의 원인을 설명 할 수 있습니까? 내 대답은 맞거나 틀렸습니까? 에서 덤프 때문에 대답은

내가이 코드와 프로 시저를 호출했다 :

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에서 자신의 번호가

+0

@ Bob Jarvis 할 수 있습니다. 기꺼이 설명해주십시오.이 질문을 –

+0

발생시키는 오류는 무엇입니까? –

+0

그리고 게시물을 편집하고 작성한 코드를 포함시켜 CALC_SAL을 호출하십시오. 그리고 EMPLOYEES 테이블의 EMPLOYEE_ID = 120에 대한 데이터는 무엇입니까? 감사. –

답변

0

Bob의 주석 상태가 올바르므로 코드가 올바르게 작동하므로 퀴즈 응답 A은 defensi입니다. 블레어.

ORA-01438: value larger than specified precision allowed for this column

이 데이터 문제 :이 오류 때문에

당신은 B 말을하고 있습니다. 함수 CALC_SAL()은 이 < = 999999.99 인 경우에 성공하며, 최대 값은 NUMBER(8,2)으로 정의 된 열에 맞을 것입니다. 따라서 귀하의 테이블이 귀하가 생각하는대로 정의되지 않았거나 직원의 원래 급여가 더 높다고 생각하면됩니다.

+0

설명해 주셔서 감사합니다. @ Bob Jarvis –

+0

설명해 주셔서 감사합니다. @APC –

관련 문제