0

単純な PL/SQL プロシージャを作成しようとしていますが、理解できないエラーが発生し続けます。構文エラーがいくつかあります。誰かが私を助けてくれれば幸いです。テーブルに特定の人物 (varchar2) を 2 つの日付 (DATE) である契約期間とともに挿入できるようにするプロシージャを作成する必要があります。ただし、彼の契約は既存の日付の間にあることはできません。したがって、重複することはできません。同じ人が複数の連絡先を持つことができますが、完全に異なる期間の間のみです。INTERSECT を使用する必要があることは理解しています。テーブルが 1 つしかないため、ここでの使用方法がわかりません。以前に 2 つのテーブルを交差させたことがありますが、ここで交差させるにはどうすればよいですか? また、2 つの if ステートメントを使用できるかどうかもわかりません。ありがとうございます。

CREATE OR REPLACE PROCEDURE test1
(name             VARCHAR2,
 startDate        DATE,
 endDate          DATE) 
AS
overlap       NUMBER := 0;
CURSOR cursor IS 
SELECT date_from, date_to FROM contractTable;
BEGIN
   FOR row IN cursor LOOP
   /*check if there is an overlap between dates*/
     IF (startDate, endDate) INTERESECT (SELECT date_from, date_to FROM ContractTable) THEN
  overlap := overlap + 1;       
  END IF;
  /*if there isn't, then insert new contact for this person*/
  IF overlap <= 0 THEN
    INSERT INTO ContractTable VALUES(name, startDate, endDate);
  END IF;
  END test1; 
4

1 に答える 1

0
CREATE PROCEDURE test1 (l_name IN VARCHAR2, l_start_date IN DATE, l_end_date IN DATE) 
IS 

    l_overlap_check NUMBER;

BEGIN

    SELECT count(*) INTO l_overlap_check
      FROM contract 
     WHERE (l_start_date between start_date and end_date 
           OR
            l_end_date between start_date and end_date)
      AND l_name = name;

    IF l_overlap_check = 0 THEN
        INSERT INTO contract (name, start_date, end_date)
                      VALUES (l_name, l_start, l_end);
   END IF;

END;

私は便利な Oracle 環境を持っていませんが、それは必要なものであるはずです。

于 2012-12-19T11:31:35.793 に答える