没有足够的值插入寄存器类型 Oracle SQL Developer
not enough values insert with register type Oracle SQL Developer
我正在尝试创建自定义记录类型的变量,为其设置值,然后将其插入 table。
我有困难,我不知道我错在哪里。
我检查了 table 中的列,它们都是 register 类型中的不可为 null 的列。
但是我收到 "not enough values" 错误。
我在 SQL 开发人员工作。
这是我的代码:
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;
我认为问题在于 SQL 将数据类型对象与数据类型成员分开处理。 v_ang 被视为单个项目,即使它由多个子元素组成。
您需要创建 table 类型为 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);
您创建了员工的记录类型table。并且您想使用此类型向 empil table 中插入一条记录。您混淆了实现此目的的两种方法。
第一:
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;
希望我已经为你说清楚了。
祝你学习顺利!!!
我正在尝试创建自定义记录类型的变量,为其设置值,然后将其插入 table。 我有困难,我不知道我错在哪里。 我检查了 table 中的列,它们都是 register 类型中的不可为 null 的列。 但是我收到 "not enough values" 错误。 我在 SQL 开发人员工作。 这是我的代码:
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;
我认为问题在于 SQL 将数据类型对象与数据类型成员分开处理。 v_ang 被视为单个项目,即使它由多个子元素组成。
您需要创建 table 类型为 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);
您创建了员工的记录类型table。并且您想使用此类型向 empil table 中插入一条记录。您混淆了实现此目的的两种方法。 第一:
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;
希望我已经为你说清楚了。
祝你学习顺利!!!