2015-05-11 42 views
-2

我想將字符串轉換爲字符串,反之亦然。我需要它進行一個查詢,我在名爲Unica(IBM Experience One)的EMM套件中運行該查詢。將字符串轉換爲Oracle中的列名稱

我有一個字符串,即'CL_CREDIT_LIMIT',我需要在查詢中使用它作爲字符串填充表(使用CASE),我也需要用作列名。兩者在相同的查詢中。

更具體地說,我將這個值傳遞給一個宏(在Unica中),但只有一次(或者作爲字符串(帶有'')或者作爲列名)。所以我只需要一種方法將它們轉換爲對方,並且哪一個對哪個字符串最好,但最好是列名。

我想知道,如果有一個

+0

請編輯你的問題並解釋你想要做的事情。作爲問題的立場,我不清楚你的意圖。您是否試圖將一個字符串變量傳遞給一個SQL語句,其中該變量的內容被視爲一個列名稱?如果是這樣,那是行不通的。您可能想要調查[如何在PL/SQL中使用動態SQL](http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/dynamic.htm#LNPLS011)。祝你好運。 –

+0

感謝您閱讀我的問題鮑勃。這是我擁有的Oracle + Unica問題。 我這樣說,也許它說得很清楚: 我有一個參數(或令牌)傳遞給它的查詢。這個參數是我可以選擇一個類型的表名。如果我把它設置爲none(這是一個Unica事物),並且查詢會將它視爲一個名稱,如列名稱(不帶''),並且可以用於像「SELECT MyParamater FROM MY_TABLE」這樣的語句中。 – Fortysixand2

+0

在同一個查詢中,我想使用MyPramater作爲字符串,如下所示:「SELECT X FROM Y WHERE COLUMN_NAME ='MyParameter'」所以我只能將參數作爲String或None傳遞,因此我需要將它作爲兩個參數來使用,所以我需要將其從字符串轉換爲無或從無轉換爲string.it無關緊要。 – Fortysixand2

回答

0

這聽起來像你對我需要動態地生成一個查詢,然後執行它。也許下面會給你一些想法:

DECLARE 
    strQuery  VARCHAR2(32767); 
    strColumn_name VARCHAR2(100) := 'CL_CREDIT_LIMIT'; 
    cCursor  SYS_REFCURSOR; 
    nColumn_value NUMBER; 
    strVal2  VARCHAR2(32767); 
    dtVal3   DATE; 
BEGIN 
    strQuery := 'SELECT ' || strColumn_name || ', FIELD2, FIELD3 ' || 
       'FROM SOME_TABLE ' || 
       'WHERE ' || strColumn_name || ' > 10000'; 

    OPEN cCursor FOR strQuery; 

    LOOP 
    FETCH cCursor 
     INTO nColumn_value, strVal2, dtVal3; 
    EXIT WHEN cCursor%NOTFOUND; 

    -- Do something with the fetched values - for example... 

    DBMS_OUTPUT.PUT_LINE(strColumn_name || '=' || nColumn_value || 
         ' FIELD2=''' || strVal2 || '''' || 
         ' FIELD3=' || TO_CHAR(dtVal3, 'DD-MON-YYYY')); 

    EXECUTE IMMEDIATE 'UPDATE SOME_OTHER_TABLE ' || 
         'SET SOME_COLUMN = ' || 
         'CASE ' 
          'WHEN ' || strColumn_name || ' = ''CL_CREDIT_LIMIT'' THEN 123 ' || 
          'WHEN ' || strColumn_name || ' = ''CL_OTHER'' THEN 456 ' || 
          'ELSE 789 ' 
         'END ' 
         'WHEN KEY_COLUMN = ''SOMETHING OR OTHER'''; 
    END LOOP; 

    CLOSE cCursor; 
END; 

分享和享受。