實務開發中,常需建立游標回傳「主表所有欄位 + 關聯表特定欄位」的合併結果集。透過 %ROWTYPE 搭配明確列出關聯欄位,可兼顧彈性與型別安全。
CURSOR sal_data(cp_center_temp_id VARCHAR2) IS
SELECT data.*, -- 主表所有欄位
post.id emp_post_id, -- 關聯表欄位加別名
doc.salary_tax_bd sa_tax_bd,
batch.bill_year_month,
batch.id batch_id,
post.emp_id employee_id
FROM sa_salary_data data
LEFT JOIN sa_salary_batch batch ON data.sa_batch_id = batch.id
LEFT JOIN sa_salary_document doc ON data.sa_doc_id = doc.id
LEFT JOIN pb_emp_post post ON doc.emp_post_id = post.id
LEFT JOIN pb_send send ON post.send_id = send.id
WHERE send.cost_center_id = cp_center_temp_id;
salary_data_temp sal_data%ROWTYPE; -- 自動適配游標回傳結構
OPEN sal_data(center_temp.id);
LOOP
FETCH sal_data INTO salary_data_temp;
EXIT WHEN sal_data%NOTFOUND;
-- 處理邏輯:salary_data_temp.emp_post_id 等均可直接存取
END LOOP;
CLOSE sal_data;
%ROWTYPE 自動同步,無需修改宣告區。SELECT * 僅限主表,關聯表務必明確列出欄位並加別名。cp_center_temp_id)提升重用性與安全性。BULK COLLECT 減少 Context Switch。此模式在薪資、帳務等多表關聯報表開發中極為實用,推薦納入團隊編碼規範。