2

割り当てのために、私は次のようなものを持っていました(簡潔にするために簡略化しています):

STUDENT(StudentID, Fname. Lname)  StudentID PK
UNIT(UnitID, UnitName)            UnitID PK
STUDENT_UNIT((StudentID, UnitID)  StudentID PK/FK UnitID PK/FK

学生とその学生が完了した単元に関する情報を挿入する必要がありました。あくまで初級レベルのSQLなので、以下は受け入れました

INSERT INTO STUDENT
VALUES(seqStudID.NextVal, 'Bob', 'Brown');

INSERT INTO STUDENT_UNIT(seqStudID.CurrVal, 111);

INSERT INTO STUDENT_UNIT(seqStudID.CurrVal, 222);

INSERT INTO STUDENT_UNIT(seqStudID.CurrVal, 333);

しかし、このデータを入力する実際の方法は何だろうと思っていましたが、ループを伴う手順でしょうか? もしそうなら、どのような種類のループ (任意の量のユニットを処理できるように)。

前もって感謝します

4

3 に答える 3

1

これを行う最善の方法の 1 つは、 を使用することstored procedureです。以下の手順ですべてが実行されます。

CREATE OR REPLACE 
PROCEDURE set_stud_unit(
          i_fname IN VARCHAR2,
          i_lname IN VARCHAR2,
          i_unitid IN VARCHAR2)
IS
     l_studentid student.studentid%TYPE;
BEGIN

     INSERT INTO student(studentid, fname, lname)
          VALUES(seqstudid.NEXTVAL, i_fname, i_lname)
          RETURNING studentid INTO l_studentid;

     INSERT INTO student_unit (studentid, unitid)
          (SELECT l_studentid, (COLUMN_VALUE).getNumberVal() vid FROM xmltable(i_unitid));

     COMMIT;

END;     
/

以下のようにカンマ区切りで unitid を渡すことができます。

EXECUTE set_stud_unit('Bob', 'Brown', '111,222,333');
于 2013-10-19T07:54:05.900 に答える
0

挿入で選択を使用できます:

INSERT INTO STUDENT_UNIT select t1.StudentID ,t2.UnitID from STUDENT t1 ,UNIT t2;

この選択を制限する場所を使用できます;-)

于 2013-10-19T07:34:27.350 に答える