2016-11-13 7 views
0

사용자 정의 레코드 유형의 변수를 만들고 값을 설정 한 다음 테이블에 삽입하려고합니다. 나는 어려움을 겪고 있으며, 내가 틀린 곳을 모른다. 테이블에서 열을 검사했는데 레지스터 유형에서 모두 null을 사용할 수없는 열입니다. 그러나 "충분하지 않은 값"오류가 발생합니다. SQL Developer에서 일하고 있습니다. 나는 문제가 SQL이 데이터 유형의 멤버를보다 별도로 데이터 형식의 개체를 처리하는 것입니다 생각값이 충분하지 않습니다. Oracle SQL Developer

set serveroutput on; 

DECLARE 
    TYPE ang_record IS RECORD 
    (cod employees.employee_id%TYPE, 
    nume employees.last_name%TYPE, 
    email employees.email%TYPE, 
    h_date employees.hire_date%TYPE, 
    job_id employees.job_id%TYPE, 
    sal employees.salary%TYPE, 
    dept employees.department_id%TYPE); 
    v_ang ang_record; 
BEGIN 
    v_ang.cod := 500; 
    v_ang.nume := 'Profeanu'; 
    v_ang.email := '[email protected]'; 
    v_ang.h_date := SYSDATE; 
    v_ang.job_id := 'SH_CLERK'; 
    v_ang.sal := 2000; 
    v_ang.dept := 50; 
    INSERT INTO empil (employee_id, last_name, email, hire_date, job_id, salary, department_id) 
    VALUES v_ang; 
END; 
/
ROLLBACK; 
+0

사용 된 테이블 (직원 및 empil)이 다른 이유는 무엇입니까? – wieseman

+0

employees는 쿼리를 수행하는 테이블이고 empil은 수정할 수있는 테이블입니다 (동일한 유형 임) –

+0

왜이 작업을 수행 하시겠습니까? empil 및 쿼리 직원을 수정하면 데이터가 오래된 것입니다. – wieseman

답변

2

직원 테이블의 레코드 유형을 만들었습니다. 그리고이 유형을 사용하여 레코드를 empil 테이블에 삽입하려고합니다. 이를 달성하기 위해 두 가지 방법을 혼합했습니다. 첫째 :

set serveroutput on; 

     DECLARE 
      TYPE ang_record IS RECORD 
      (cod employees.employee_id%TYPE, 
      nume employees.last_name%TYPE, 
      email employees.email%TYPE, 
      h_date employees.hire_date%TYPE, 
      job_id employees.job_id%TYPE, 
      sal employees.salary%TYPE, 
      dept employees.department_id%TYPE); 
      v_ang ang_record; 
     BEGIN 
      v_ang.cod := 500; 
      v_ang.nume := 'Profeanu'; 
      v_ang.email := '[email protected]'; 
      v_ang.h_date := SYSDATE; 
      v_ang.job_id := 'SH_CLERK'; 
      v_ang.sal := 2000; 
      v_ang.dept := 50; 
      INSERT INTO empil (employee_id, last_name, email, hire_date, job_id, salary, department_id) 
      VALUES (v_ang.code, v_ang.nume, v_ang.email, v_ang.h_date, v_ang.job_id, v_ang.sal, v_ang.dept); 
     END; 
     /
     ROLLBACK; 

둘째 :

set serveroutput on; 

     DECLARE 
      v_ang r_empil%rowtype; 
     BEGIN 
      v_ang.employee_id := 500; 
      v_ang.last_name := 'Profeanu'; 
      v_ang.email := '[email protected]'; 
      v_ang.hire_date := SYSDATE; 
      v_ang.job_id := 'SH_CLERK'; 
      v_ang.salary := 2000; 
      v_ang.department_id := 50; 
      INSERT INTO empil (employee_id, last_name, email, hire_date, job_id, salary, department_id) 
      VALUES v_ang; 
     END; 
     /
     ROLLBACK; 

내가 당신을 위해 분명히 한 수 있기를 바랍니다.

공부를 잘 해보십시오.

1

: 다음은 내 코드입니다. v_ang은 여러 하위 요소로 구성 되더라도 단일 항목으로 간주됩니다.

열이 ang_record 인 테이블을 생성하거나 이처럼 개별적으로 요소를 삽입해야합니다.

INSERT INTO empil (employee_id, last_name, email, hire_date, 
        job_id, salary, department_id) 
VALUES (v_ang.employee_id, v_ang.last_name, v_ang.email, 
     v_ang.hire_date, v_ang.job_id, v_ang.salary, 
     v_ang.department_id);