我没有甲骨文,但我没有找到成功的代码。我只需要踢 1-2 次就可以让我的大脑活跃起来。
CREATE OR REPLACE PROCEDURE kalender_erstellen (monday DATE)
IS
v1 NUMBER (10) DEFAULT 5;
v2 NUMBER (10) DEFAULT 1;
vDate DATE;
BEGIN
vDate: = monday;
WHILE v1> 0 LOOP - goes through the days (5 days)
v2: = 1; - Reset the appointments
WHILE v2 <20 LOOP - Goes through the appointments per day (20 appointments)
INSERT INTO Event
VALUES (NULL, NULL, NULL, NULL, NULL, TO_DATE (MINUTE, (30 * v2), TIMESTAMP ('07: 30: 00 ')));
- First, the date is converted into a TimeStamp. Subsequently, 30 minutes are expected per run.
v2: = v2 + 1; - Counter for the dates
END LOOP;
vDate: = (vDate, INTERVAL '31' DAY); - Add a day to the day
v1: = v1 - 1; - Counter for the days
END LOOP;
END;
Error(326,14): PLS-00382: expression is of wrong type
Error(326,5): PL/SQL: Statement ignored
Error(320,7): PL/SQL: SQL Statement ignored
原始 MySQL 代码:
DELIMITER $$
DROP PROCEDURE IF EXISTS kalender_erstellen $$
CREATE PROCEDURE kalender_erstellen (monday DATE)
BEGIN
DECLARE v1 INT(6) DEFAULT 5;
DECLARE v2 INT(6) DEFAULT 1;
DECLARE vDate DATE;
SET vDate = monday;
WHILE v1 > 0 DO -- geht die Tage durch (5 Tage)
SET v2 = 1; -- Setzt die Termine zurück
WHILE v2 < 20 DO -- Geht die Termine pro Tag durch (16 Termine)
INSERT INTO Termin VALUES (NULL,NULL, NULL, NULL, NULL, TIMESTAMPADD(MINUTE,(30 * v2),TIMESTAMP(vDate,'07:30:00')));
-- Erst wird das Date in einen TimeStamp umgewandelt. Anschließend werden pro durchlauf 30 min drauf gerechnet.
SET v2 = v2 + 1; -- Counter für die Termine
END WHILE;
SET vDate = DATE_ADD(vDate, INTERVAL 31 DAY); -- Addiert auf den Tag einen Tag
SET v1 = v1 - 1; -- Counter für die Tage
END WHILE;
END$$
DELIMITER ;