検査が完了した後に表に情報を追加するプロシージャーを作成しようとしています。チェックの1つは、別のテーブルのフィールドがすでに他のテーブル内に存在するかどうかを比較することです。私は現在、あるフィールドを他のテーブルの列全体と比較して一致するものがあるかどうかを調べる方法を探しています。例えば、
など。 1つのフィールドはPrerequisiteID
で、このIDがコーステーブルCourseID
に存在することを確認する必要があります。私はcourseID
の全列に単一のprerequisiteID
をどのように比較するか検討するのに苦労しています。どんな助けもありがとう。SQLプロシージャー - 値の比較
私がやっている実際の質問は次のとおりです。
は、ブランドの新しいコースを提供するために与えられたコースの詳細を使用して手順NEW_COURSEを書きます。そのための前提条件コース(もしあれば)がすでにCOURSEテーブルに存在し
:新しいコースを開く前に、手順があることを保証します。簡単にするため、コースには1つのコースを前提条件とすることができます。
コースの前提条件は、より低いレベルにする必要があります。たとえば、ISYS326の前提条件は、100レベルまたは200レベルのコースでなければならず、300レベルのコースにはできません。
上記の要件のいずれかが失敗した場合、手続きは適切な警告メッセージを出力し、COURSEテーブルを修正しない例外
WRONG_PREREQ
を発生させます。
テーブルの構造:コースの
CREATE OR REPLACE
PROCEDURE NEW_COURSE
(
c_course_ID COURSE.COURSEID%type,
c_dept_ID COURSE.DEPTID%type,
c_coursename COURSE.COURSENAME%type,
c_textbook COURSE.TEXTBOOK%type,
c_credithour COURSE.CREDITHOUR%type,
c_max_enrol COURSE.MAX_ENROL%type,
c_actual_enrol COURSE.ACTUAL_ENROL%type,
c_availability COURSE.AVAILABILITY%type,
p_prerequisite_ID HAS_PREREQUISITE.PREREQUISITEID%type
)
IS
BEGIN
IF (p_prerequisite_ID != COURSE.courseID) THEN WRONG_PREREQ (-20205, 'That prerequisite does not exist');
ELSE IF(p_prerequisite_ID > c_course_ID) THEN WRONG_PREREQ(-20205, 'That is not a valid prerequisite');
ELSE
INSERT INTO COURSE (COURSEID, DEPTID, COURSENAME, TEXTBOOK, CREDITHOUR, MAX_ENROL, ACTUAL_ENROL, AVAILABILITY)
VALUES (c_course_ID, c_dept_ID, c_coursename, c_textbook, c_credithour, c_max_enrol, c_actual_enrol, c_availability);
END IF;
END NEW_COURSE;
データ:これは、これまでのところ、私の手順です
create table COURSE (
COURSEID CHAR(8) not null,
DEPTID CHAR(8) not null,
COURSENAME VARCHAR2(20),
TEXTBOOK VARCHAR2(20),
CREDITHOUR NUMBER(2),
MAX_ENROL NUMBER(4),
ACTUAL_ENROL NUMBER(4),
AVAILABILITY NUMBER(4),
constraint PK_COURSE primary key (COURSEID)
);
create table HAS_PREREQUISITE (
COURSEID CHAR(8) not null,
PREREQUISITEID CHAR(8) not null,
constraint PK_HAS_PREREQUISITE primary key (COURSEID, PREREQUISITEID)
);
alter table HAS_PREREQUISITE
add constraint FK_HAS_PRER_HAS_PRERE_COURSE foreign key (COURSEID)
references COURSE (COURSEID);
alter table HAS_PREREQUISITE
add constraint FK_HAS_PRER_HAS_PRERE_COURSE1 foreign key (PREREQUISITEID)
references COURSE (COURSEID);
、私は私がちょうどそこに何かを取得しようとしています間違っている知っている
+----------+----------+------------+----------+------------+-----------+--------------+--------------+
| CourseID | DeptID | COURSENAME | TEXTBOOK | CREDITHOUR | MAX_ENROL | ACTUAL_ENROL | AVAILABILITY |
+----------+----------+------------+----------+------------+-----------+--------------+--------------+
| ISYS224 | FSE | | | | | | |
| COMP225 | FSE | | | | | | |
| ISYS114 | FSE | | | | | | |
| COMP115 | FSE | | | | | | |
+----------+----------+------------+----------+------------+-----------+--------------+--------------+
前提条件にはデータがありません(彼らは検証し、常に消費するプログラムの一部に余分なコードを伴うことは困難であるため)
が+----------------+--------------+
| Column Name | Data Type |
+----------------+--------------+
| COURSEID | CHAR(8 BYTE) |
| PREREQUISITEID | CHAR(8 BYTE) |
+----------------+--------------+
は、あなたのテーブルのレイアウトはテーブルのコース を(作成 –
表示 COURSEID CHAR(8)nullではない、 DEPTID CHAR(8)nullではないが、 COURSENAME VARCHAR2(20)、 教科書VARCHAR2(20)、 CREDITHOUR番号(2)、 MAX_ENROL番号(4)、 ACTUAL_ENROL番号(4)、 可用性番号(4)、 制約PK_COURSE主キー(COURSEID) )。 – Rainbw
テーブルHAS_PREREQUISITE ( COURSEID CHAR(8)NOT NULL、 PREREQUISITEID CHAR(8)NOT NULL、 制約PK_HAS_PREREQUISITE主キー(COURSEID、PREREQUISITEID) )を作成します。 alter table HAS_PREREQUISITE 制約を追加するFK_HAS_PRER_HAS_PRERE_COURSE外部キー(COURSEID) 参照COURSE(COURSEID); alter table HAS_PREREQUISITE 制約を追加するFK_HAS_PRER_HAS_PRERE_COURSE1外部キー(PREREQUISITEID) 参照COURSE(COURSEID); – Rainbw