2016-11-13 64 views
0

我想做一個自定義記錄類型的變量,設置值,然後將其插入到表中。 我有困難,我不知道我錯在哪裏。 我檢查了表中的列,它們都是註冊類型中的不可空列。 但是,我收到了「價值不夠」的錯誤。 我正在SQL Developer中工作。 這裏是我的代碼:沒有足夠的值插入與註冊類型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

員工是我們查詢的表格,empil是我們可以修改的表格(他們是同一類型) –

+0

爲什麼你想要這樣做?如果您修改empil並查詢員工,那麼數據已過時。 – wieseman

回答

2

您創建了employees表的記錄類型。並且您想要使用此類型將記錄插入到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

我相信問題是,SQL分別處理的數據類型的對象比它的數據類型的成員。雖然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); 
相關問題