2011-02-03 50 views
1

你好,我是一名PHP開發人員,試圖與Oracle合作。所以我需要將一組變量傳遞給Oracle存儲過程。所以作爲一個基本的嘗試,我試圖訪問一個接受三個參數的過程,其中兩個參數是varrays,但是當我傳遞聲明的varrays時,出現錯誤。我很確定,這是一個小語法,但我無法弄清楚這件事。將varray變量傳遞到存儲過程 - 基本

下面是我的表架構和存儲過程:現在

create table emails (
user_id varchar2(10), 
friend_name varchar2(20), 
email_address varchar2(20)); 

create or replace type email_array as varray(100) of varchar2(20); 
/
show errors 
create or replace type friend_array as varray(100) of varchar2(20); 
/
show errors 

create or replace procedure update_address_book(
p_user_id in varchar2, 
p_friend_name friend_array, 
p_email_addresses email_array) 
is 
begin 
delete from emails where user_id = p_user_id; 
forall i in indices of p_email_addresses 
insert into emails (user_id, friend_name, email_address) 
values (p_user_id, p_friend_name(i), p_email_addresses(i)); 
end update_address_book; 

,粘貼下面是我的方式,我想從一個匿名塊執行此操作。

declare 
    type email_list is varray(100) of varchar2(20); 
    type friend_list is varray(100) of varchar2(20); 
    emails email_list; 
    friends friend_list; 
begin 
emails :=email_list('[email protected]','[email protected]','[email protected]'); 
friends := friend_list('kwaja','sayya','mayya'); 
execute update_address_book('1',emails,friends); 
end; 

我得到的錯誤是在附近執行,我想我不應該執行一個聲明塊內的操作,但是我無法理解我將如何解決。

回答

3

您不需要關鍵字EXECUTE就可以從PL/SQL塊中調用過程。只要刪除那個字。

但是,如果您顯示了您正在收到的實際錯誤,將會有所幫助,因爲可能會出現其他錯誤。例如,您也可以按錯誤順序調用update_address_book()調用的參數,並且您正在塊中重新創建新類型,而不是使用先前聲明的類型。

這將運行:

declare 
    emails email_array; 
    friends friend_array; 
begin 
    emails := email_array('[email protected]','[email protected]','[email protected]'); 
    friends := friend_array('kwaja','sayya','mayya'); 
    update_address_book('1',friends,emails); 
end; 
/
+0

謝謝亞歷!數據類型的執行和錯誤聲明是問題:) – macha 2011-02-04 15:08:15