2011-08-24 103 views
1

以下SQL試圖選擇一些數值,它滿足的是如何在表中獲得的Oracle SQL

select cd as key_type, decode 
from general_code 
where key_type = 'A_MAP_TYPE' 
and cd in (
    select distinct(A_MAP_TYPE) 
    from sales_channel 
); 

A_MAP_TYPE是列名的條件(和FK)列名的字符串值sales_channel,它在general_code(作爲PK)被引用。

我知道這SQL是非便攜式在於當的A_MAP_TYPE變化,即,B_MAP_TYPE名稱,則相應的SQL需要改變。有沒有辦法在此SQL中執行類似PL/SQLTABLE_NAME.COLUMN_NAME%TYPE

回答

3

您可以使用動態SQL。這可能需要對您的查詢設置的方式進行一些更改,但應該可行。

http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/dynamic.htm

你基本上就需要把當前的查詢轉換爲字符串,並執行字符串。當前的A_Map_字段在哪裏,那將是一個參數。對於第一種情況,您需要引用它,以便它仍然是執行字符串內的字符串。對於第二個A_Map_字段,您可以在其周圍加上引號,

2

不是。您可以構建動態SQL並立即使用執行,但我不建議這樣做。

也可以使用列元數據進行代碼生成。此時它就像是一個動態生成的CREATE VIEW或CREATE PROC--它只執行一次並編譯到數據庫對象中。

您可以擁有一個例外進程,它根據表中的數據檢查元數據以查找可能需要更新的內容。