我是初學者,我有這個問題。所以我有一個表:在光標內循環插入記錄
config_items:
id | item_key | item_alias |
---|---------------------|------------|
5 | folder1.Move.hasFile| hasFile |
4 | folder1.Move | Move |
3 | folder2.Move | Move |
2 | folder3.Move | Move |
1 | folder4.Download | Download |
我要帶它有.Move在其item_key記錄。獲得這些記錄後,我想在每個記錄上添加.hasFile,並將它們作爲新記錄插入到表中。但是,如果該config_key已經存在(例如folder1.Move.hasFile),不應該添加在表上。我已經做了以下,但它給我主鍵違規錯誤的ID。有人能解釋我在哪裏做錯了嗎?
CREATE OR REPLACE PROCEDURE insert_hasFile(v_key IN config_items.item_key%TYPE)
AS
BEGIN
insert into config_items
(id,
item_key,
item_alias)
(select
(select max(id) from config_items)+1,
v_key,
'hasFile'
from
config_items
where
not exists(select * from config_items where v_key =item_key)
);
END;
/
DECLARE
CURSOR item_records_curr
IS
SELECT * from config_items
where item_key LIKE '%.Move';
v_item_key config_items.item_key%TYPE;
v_all_info item_records_curr%ROWTYPE;
BEGIN
OPEN item_records_curr;
LOOP
FETCH item_records_curr into v_all_info;
v_item_key := v_all_info.item_key || '.hasFile';
insert_hasFile(v_item_key);
EXIT WHEN item_records_curr%NOTFOUND;
END LOOP;
CLOSE item_records_curr;
END;
沒有了PK包含哪些列?只有身份證或其他東西? – Aleksej
使用'max(id)'來計算主鍵的唯一值是個不錯的主意。你應該使用序列 - 這是更好的方法。 – AlexSmet
@Aleksej id是PK。 item_key必須是唯一的。 – Rthp