2015-02-10 69 views
1

我有一個迭代表的遊標。每一行都被插入到與遊標行相同的類型中。ORACLE中的動態字段PL/SQL

CURSOR lc_lines 
    IS 
      SELECT tlc1, tlc2, tlc3 
      FROM table_x 
     ORDER BY tlc1; 

    TYPE table_lines IS TABLE OF lc_lines%ROWTYPE 
          INDEX BY PLS_INTEGER; 

    i_table_lines     table_lines; 

我需要動態訪問類型中的列。類似這樣的:

LOOP 
      FETCH lc_lines 
      BULK COLLECT INTO i_table_lines 
      LIMIT p_i_limit; 

      --e ai vamos nos :) 
      FOR i_idx IN 1 .. i_table_lines.COUNT 
      LOOP 
       varx := i_table_lines (i_idx).tlc||'2'; 

這可能嗎?

在此先感謝

+0

答案很簡單* *沒有**。在任何(至少大部分)高級語言中,變量名不允許是動態的。只有內存分配是。 – 2015-02-10 16:26:31

+1

Fala Andre(brazuca :-) - 我不明白 - 因爲你事先知道你的光標字段(tlc1,tlc2和tlc3 - 這些都是會在循環中提供給你的 - 動態數據會做什麼你需要/你指的是什麼? – Veverke 2015-02-10 16:27:29

+0

@ Maheswaran Ravisanka:我不知道在哪種情況下你是基於你的答案,但我認爲它是不對的,在C#中,一種高級語言(並且被廣泛接受一個),你可以使用類型爲「dynamic」的變量(沒有編譯/類型檢查任何東西,比如javascript),我們不要忘記我們在這裏談論的是PL/SQL,最終是DB操作語言。 – Veverke 2015-02-10 16:29:40

回答

1

你應該能夠使用DBMS_SQL程序做到這一點...它的存在,以協助複雜的,動態的SQL /光標等

嘗試閱讀這裏的文檔在:

http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/dynamic.htm#LNPLS00001

你基本上設置你的光標,你的結合,你的立柱等 然後就可以開始訪問它們而不必知道你多少列有首先。

[編輯]我連接到Oracle 11頁,但是,這個功能幾乎是相同的Oracle 10和11之間..這裏是10g的文檔,如果你需要: http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_sql.htm#i996963 [/編輯]

+0

謝謝...我會試一試:) – 2015-02-10 16:39:26