我是PHP和sql的新手,我正在構建一個小遊戲來學習更多後者。PL/SQL函數在檢查後從表中返回一個值
這是我的三個表的簡單數據庫:
-- *********** SIMPLE MONSTERS DATABASE
CREATE TABLE monsters (
monster_id VARCHAR(20),
haunt_spawn_point VARCHAR(5) NOT NULL,
monster_name VARCHAR(30) NOT NULL,
level_str VARCHAR(10) NOT NULL,
creation_date DATE NOT NULL,
CONSTRAINT monster_id_pk PRIMARY KEY (monster_id)
);
-- ****************************************
CREATE TABLE spawntypes (
spawn_point VARCHAR(5),
special_tresures VARCHAR (5) NOT NULL,
maximum_monsters NUMBER NOT NULL,
unitary_experience NUMBER NOT NULL,
CONSTRAINT spawn_point_pk PRIMARY KEY (spawn_point)
);
-- ****************************************
CREATE TABLE fights (
fight_id NUMBER,
my_monster_id VARCHAR(20),
foe_spawn_point VARCHAR(5),
foe_monster_id VARCHAR(20) NOT NULL,
fight_start TIMESTAMP NOT NULL,
fight_end TIMESTAMP NOT NULL,
total_experience NUMBER NOT NULL
loot_type NUMBER NOT NULL,
CONSTRAINT my_monster_id_fk FOREIGN KEY (my_monster_id)
REFERENCES monsters (monster_id),
CONSTRAINT foe_spawn_point_fk FOREIGN KEY (foe_spawn_point)
REFERENCES spawntypes (spawn_point),
CONSTRAINT fight_id_pk PRIMARY KEY (fight_id)
);
鑑於這個數據我怎麼能輕而易舉地進行兩個任務:
1)我想創建一個PL/SQL函數只傳遞一個fight_id作爲參數並給出foe_spawn_point(在戰鬥表內)返回與引用spawypes表的spaw點有關的unitary_experience,我該怎麼做? : -/[f(x)]
爲了計算從戰鬥中獲得的總體經驗(unitary_experience * fight_length),我創建了一個函數,給定一個特定的戰鬥將減去fight_end與fight_start,所以現在我知道戰鬥持續了多久。 [f(y)]
2)是否有可能在數據庫填充任務期間使用這兩個函數(將它們返回的結果相乘)?插入到戰鬥值(....,f(x)* f(y),'戰利品A');
爲了填充戰鬥表內的所有total_experience條目?
感謝你的幫助
你好戈登,謝謝你真的很好的解釋:)我還有一個疑問,在加入操作不應該是ON st.spawn_point = f.for_spawn_point?我很困惑 – Jonathan 2013-03-02 21:32:46
@Jonathan。 。 。是的,那是一個錯字。 – 2013-03-02 21:49:00
好!我真的很感謝你:D – Jonathan 2013-03-02 21:51:11