2016-11-13 31 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

employeesテーブルのレコードタイプを作成しました。また、このタイプを使用してempilテーブルにレコードを挿入したいとします。あなたはこれを達成するために2つの方法を混在させました。 まず:

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); 
関連する問題