簡體   English   中英

沒有足夠的值插入寄存器類型Oracle SQL Developer

[英]not enough values insert with register type Oracle SQL Developer

我試圖做一個自定義記錄類型的變量,為其設置值,然后將其插入表中。 我遇到了困難,我不知道自己在哪里錯。 我檢查了表中的列,它們都是寄存器類型中所有不可為空的列。 但是我收到“值不足”的錯誤。 我正在使用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 := 'ileana.profeanu@gmail.com';
  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;

您已創建了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 := 'ileana.profeanu@gmail.com';
          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 := 'ileana.profeanu@gmail.com';
          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;

希望我已向您說明。

祝你學習順利!!!

我認為問題在於,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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM