2014-01-21 18 views
1

任何人都可以幫助我如何獲取數組中的數組值在for循環ORACLE中。 這是一個IN PARAMETER Array的例子。 我想獲得數組的值是ID「EMP01658」的「ID」和VALUE中的數組[3]。如何獲取數組中的for循環中的數組值ORACLE

陣列 ( [1] => DC0001 [2] => DC0002 [3] =>數組 ( [ID] => EMP01658 ) )

這是我的PL SQL CODE;

- 這是我的包全局變量

CREATE OR REPLACE PACKAGE PKG_GLB_VARIABLES 
IS 

    TYPE refcursor  IS REF CURSOR;       
    TYPE val_Array  IS TABLE OF VARCHAR2(3000) INDEX BY BINARY_INTEGER; 
END; 

- 這是我的程序

CREATE OR REPLACE PROCEDURE Proc_Array(
    param_Array  IN pkg_glb_variables.val_Array 
) 
IS 

BEGIN 
    for i in 1 .. param_Array.count 
     loop 
     DBMS_OUTPUT.put_line('aRRay('||i||') :'||param_Array(i)); 

     IF param_Array(i)='Array' THEN 
     DBMS_OUTPUT.put_line('UY MAY ISA PANG ARRAY!'); 
      for i_2 in 1 .. param_Array(i).count 
      loop 
       DBMS_OUTPUT.put_line('aRRay('||i_2||') :'||param_Array(i_2)); 
      end loop;  
     END IF; 
     end loop; 


END; 

謝謝。 :)

+0

抱歉,我不知道你在問什麼。請顯示更完整的代碼。 – OldProgrammer

+0

嗨,先生,我剛剛編輯它懇請檢查先生,非常感謝你 –

+0

請看這個問題和答案:[創建或模擬PL/SQL中的二維數組](http://stackoverflow.com/questions/9155742/創建或 - 模擬兩維陣列式-PL-SQL)。 –

回答

2

VARCHAR2不同於數組(集合或PL/SQL表),並且不能像這樣索引。您需要使用Oracle的字符串函數。這裏是打印出每個VARCHAR2陣列元件的每一個字符的例子:

CREATE OR REPLACE PROCEDURE Proc_Array(
    param_Array  IN pkg_glb_variables.val_Array 
) 
IS 
vElement VARCHAR2(3000); 
vLength PLS_INTEGER; 

BEGIN 
    for i in 1 .. param_Array.count 
     loop 
     DBMS_OUTPUT.put_line('aRRay('||i||') :'||param_Array(i)); 

     vElement := param_array(i); 
     vLength := length(vElement); 

      for i_2 in 1 .. vLength 
      loop 
       DBMS_OUTPUT.put_line('aRRay('||i_2||') :'|| 
          substr(vElement,i_2,1)); 
      end loop;  
     end loop; 
END; 

一個試驗來調用該過程:

declare 
a pkg_glb_variables.val_Array; 
begin 
    a(1) := 'HELLO'; 
    a(2) := 'goodbye'; 
    proc_array (a); 
end; 

所得DBMS_OUTPUT:

my output - aRRay(1) :HELLO 
my output - aRRay(1) :H 
my output - aRRay(2) :E 
my output - aRRay(3) :L 
my output - aRRay(4) :L 
my output - aRRay(5) :O 
my output - aRRay(2) :goodbye 
my output - aRRay(1) :g 
my output - aRRay(2) :o 
my output - aRRay(3) :o 
my output - aRRay(4) :d 
my output - aRRay(5) :b 
my output - aRRay(6) :y 
my output - aRRay(7) :e 
+0

順便說一句,請告訴我你真的沒有使用8i? – OldProgrammer

+0

嘿,先生,謝謝你的回答,我現在就試試。哈哈,是的,先生,即時通訊仍然使用Oracle 8i,但我現在上傳我所有的工作在oracle 11g –

+0

**示例數組:** 'Array([1] => DC0001 [2] => DC0002 [3] =>數組( [ID] => EMP01658 ) )' 您好,爵士,嗯所有我想要得到數組的值是在 「ID」 陣列[3]和VALUE ID 「EMP01658」 的。你能分享我一些技巧來獲得ID的價值嗎?我找不到另一種方式來做到這一點。再次謝謝你,先生:) –