我有一個table_lookup
。這是主表,其具有該表在不同的表中引用像 table_assignment
用於恢復SQL中已翻譯列值的動態查詢
emp no. name Employee category active/inactive
1 divya 3 A
2 abc FR A
3 XYZ 4 I
4 aMY 100 A
表table_nationality
Emp no. nationality
1 QA
2 RS
4 RO
的所有查找代碼等
LOOKUP_TYPE LOOKUP_CODE MEANING ENABLED_FLAG
EMP_CAT 3 Hourly with fixed hours per week Y
EMP_CAT 4 Hourly Y
EMP_CAT CAS Casual Y
EMP_CAT FR Full-time regular Y
EMP_CAT FR_01 Full-time Y
ABSENCE_CATEGORY DLHM Leave Y
ABSENCE_CATEGORY DLHNM Leave on the death of a husband Y
ABSENCE_CATEGORY DLR Leave on the death of a relative Y
ABSENCE_CATEGORY GB_ADO Adoption Y
ABSENCE_CATEGORY GB_PAT_ADO Paternity adoption Y
NATIONALITY PY Paraguayan Y
NATIONALITY QA Qatari Y
NATIONALITY RO Romanian Y
NATIONALITY RS Serbian
這是lookup_code
˚F被翻譯爲table_Assignment
employee_category
專欄和國家y列table_nationality
。
我有這樣一個查詢:
select emp_no.,
name,
employee_category
from table_assignment lookup_assignmen,
table_lookup lookup_stg
where lookup_stg.lookup_type = 'EMP_CAT'
AND LOOKUP_STG.LOOKUP_CODE = lookup_assignmen.employee_category;
同樣,對於table_nationality
類似:
select emp_no.,
nationality
from TABLE_NATIONALITY lookup_NATIONALITY,
table_lookup lookup_stg
where lookup_stg.lookup_type = 'NATIONALITY'
AND LOOKUP_STG.LOOKUP_CODE = lookup_NATIONALITY.employee_category;
現在我想檢測如果說,例如table_assignment
動態查詢有任何僱員類別,它是不是在table_lookup
。
例如:在table_assignment
員工類別列中給出了值100,這在table_lookup
中不存在。 應該在查詢中檢索這些值,但查詢應該是動態的,以便它應該檢索table_Assignment
,table_nationality
或任何其他 表中的所有無效查找值。我可以在查詢中輸入lookup_type
和表名,並且應該檢索無效值。
如何將靜態查詢更改爲動態?
爲什麼你想要它是動態的?你有沒有數不清的'孩子桌子'?你如何知道子表中的相關列名?並且子表是否有對查找表的外鍵約束 - 我想這不是來自這個設計。 (呃,你擔心孤兒數據......)爲什麼你把所有東西都放在一個查詢表中,而不是每種類型的查詢表中,這樣可以保證正確的參照完整性? –
@Alex Poole這就是查找代碼在HCM(Oracle HCM)中的存在方式 –
SQL中的動態SQL可能非常棘手,應儘可能避免。一次性PL/SQL函數是否足夠好?或者你是否需要一個構建類似動態查詢的框架? –