mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2025-12-11 20:02:09 +00:00
port GildedRose to Oracle PL/SQL table and stored procedure
This commit is contained in:
parent
16b7b46653
commit
1ad3fcd95e
7
plsql/create_user_if_needed.sql
Normal file
7
plsql/create_user_if_needed.sql
Normal file
@ -0,0 +1,7 @@
|
||||
PROMPT Creating User 'DOJO'
|
||||
DROP USER dojo;
|
||||
CREATE USER dojo IDENTIFIED BY pass
|
||||
DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE temp;
|
||||
GRANT RESOURCE TO dojo;
|
||||
GRANT CONNECT TO dojo;
|
||||
/
|
||||
9
plsql/item.sql
Normal file
9
plsql/item.sql
Normal file
@ -0,0 +1,9 @@
|
||||
PROMPT Creating Table 'ITEM'
|
||||
DROP TABLE item;
|
||||
CREATE TABLE item
|
||||
(
|
||||
name VARCHAR2(100) NOT NULL,
|
||||
sell_in NUMBER(6) NOT NULL,
|
||||
quality NUMBER(6) NOT NULL
|
||||
);
|
||||
/
|
||||
31
plsql/item_with_id.sql
Normal file
31
plsql/item_with_id.sql
Normal file
@ -0,0 +1,31 @@
|
||||
PROMPT Creating Table 'ITEM' with auto-increment primary key 'ID'
|
||||
DROP TABLE item;
|
||||
CREATE TABLE item
|
||||
(
|
||||
id NUMBER(6) NOT NULL,
|
||||
name VARCHAR2(100) NOT NULL,
|
||||
sell_in NUMBER(6) NOT NULL,
|
||||
quality NUMBER(6) NOT NULL
|
||||
);
|
||||
/
|
||||
|
||||
ALTER TABLE item ADD (
|
||||
CONSTRAINT item_pk PRIMARY KEY (ID));
|
||||
/
|
||||
|
||||
DROP SEQUENCE item_id_seq;
|
||||
CREATE SEQUENCE item_id_seq
|
||||
INCREMENT BY 1
|
||||
START WITH 1
|
||||
MAXVALUE 999999
|
||||
MINVALUE 1
|
||||
NOCYCLE;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE TRIGGER item_bis_trg
|
||||
BEFORE INSERT ON item
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SELECT item_id_seq.NEXTVAL INTO :new.id FROM dual;
|
||||
END;
|
||||
/
|
||||
35
plsql/texttest_fixture.sql
Normal file
35
plsql/texttest_fixture.sql
Normal file
@ -0,0 +1,35 @@
|
||||
DELETE FROM item;
|
||||
|
||||
INSERT INTO item (name, sell_in, quality) VALUES ('+5 Dexterity Vest', 10, 20);
|
||||
INSERT INTO item (name, sell_in, quality) VALUES ('Aged Brie', 2, 0);
|
||||
INSERT INTO item (name, sell_in, quality) VALUES ('Elixir of the Mongoose', 5, 7);
|
||||
INSERT INTO item (name, sell_in, quality) VALUES ('Sulfuras, Hand of Ragnaros', 0, 80);
|
||||
INSERT INTO item (name, sell_in, quality) VALUES ('Sulfuras, Hand of Ragnaros', -1, 80);
|
||||
INSERT INTO item (name, sell_in, quality) VALUES ('Backstage passes to a TAFKAL80ETC concert', 15, 20);
|
||||
INSERT INTO item (name, sell_in, quality) VALUES ('Backstage passes to a TAFKAL80ETC concert', 10, 49);
|
||||
INSERT INTO item (name, sell_in, quality) VALUES ('Backstage passes to a TAFKAL80ETC concert', 5, 49);
|
||||
-- this conjured item does not work properly yet ;
|
||||
INSERT INTO item (name, sell_in, quality) VALUES ('Conjured Mana Cake', 3, 6);
|
||||
COMMIT;
|
||||
|
||||
DECLARE
|
||||
l_days NUMBER(3);
|
||||
CURSOR c_items IS
|
||||
SELECT name, sell_in, quality FROM item;
|
||||
l_item c_items%ROWTYPE;
|
||||
BEGIN
|
||||
DBMS_OUTPUT.PUT_LINE('OMGHAI!');
|
||||
|
||||
l_days := 2;
|
||||
|
||||
FOR i IN 0 .. l_days - 1
|
||||
LOOP
|
||||
DBMS_OUTPUT.PUT_LINE('-------- day ' || TO_CHAR(i) || ' --------');
|
||||
DBMS_OUTPUT.PUT_LINE('name, sellIn, quality');
|
||||
FOR l_item IN c_items LOOP
|
||||
DBMS_OUTPUT.PUT_LINE(l_item.name || ', ' || l_item.sell_in || ', ' || l_item.quality);
|
||||
END LOOP;
|
||||
DBMS_OUTPUT.PUT_LINE('');
|
||||
update_quality();
|
||||
END LOOP;
|
||||
END;
|
||||
66
plsql/update_quality.sql
Normal file
66
plsql/update_quality.sql
Normal file
@ -0,0 +1,66 @@
|
||||
CREATE OR REPLACE PROCEDURE update_quality
|
||||
IS
|
||||
CURSOR c_items IS
|
||||
SELECT name, sell_in, quality FROM item FOR UPDATE;
|
||||
l_item c_items%ROWTYPE;
|
||||
l_name item.name%TYPE;
|
||||
l_sell_in item.sell_in%TYPE;
|
||||
l_quality item.quality%TYPE;
|
||||
BEGIN
|
||||
FOR l_item IN c_items
|
||||
LOOP
|
||||
l_name := l_item.name;
|
||||
l_sell_in := l_item.sell_in;
|
||||
l_quality := l_item.quality;
|
||||
|
||||
IF l_name != 'Aged Brie' AND l_name != 'Backstage passes to a TAFKAL80ETC concert' THEN
|
||||
IF l_quality > 0 THEN
|
||||
IF l_name != 'Sulfuras, Hand of Ragnaros' THEN
|
||||
l_quality := l_quality - 1;
|
||||
END IF;
|
||||
END IF;
|
||||
ELSE
|
||||
IF (l_quality < 50) THEN
|
||||
l_quality := l_quality + 1;
|
||||
IF l_name = 'Backstage passes to a TAFKAL80ETC concert' THEN
|
||||
IF l_sell_in < 11 THEN
|
||||
IF l_quality < 50 THEN
|
||||
l_quality := l_quality + 1;
|
||||
END IF;
|
||||
END IF;
|
||||
IF l_sell_in < 6 THEN
|
||||
IF l_quality < 50 THEN
|
||||
l_quality := l_quality + 1;
|
||||
END IF;
|
||||
END IF;
|
||||
END IF;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
IF l_name != 'Sulfuras, Hand of Ragnaros' THEN
|
||||
l_sell_in := l_sell_in - 1;
|
||||
END IF;
|
||||
|
||||
IF l_sell_in < 0 THEN
|
||||
IF l_name != 'Aged Brie' THEN
|
||||
IF l_name != 'Backstage passes to a TAFKAL80ETC concert' THEN
|
||||
IF l_quality > 0 THEN
|
||||
IF l_name != 'Sulfuras, Hand of Ragnaros' THEN
|
||||
l_quality := l_quality - 1;
|
||||
END IF;
|
||||
END IF;
|
||||
ELSE
|
||||
l_quality := l_quality - l_quality;
|
||||
END IF;
|
||||
ELSE
|
||||
IF l_quality < 50 THEN
|
||||
l_quality := l_quality + 1;
|
||||
END IF;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
UPDATE item
|
||||
SET name = l_name, sell_in = l_sell_in, quality = l_quality WHERE CURRENT OF c_items;
|
||||
END LOOP;
|
||||
END update_quality;
|
||||
/
|
||||
Loading…
Reference in New Issue
Block a user