こんにちは私はPHP開発者であり、Oracleと一緒に働こうとしています。だから私はOracleのストアドプロシージャに変数のコレクションを渡す必要があります。基本的な試みとして、私は3つのパラメータを受け入れるプロシージャにアクセスしようとしていますが、2つはVARRAYですが、宣言したVARRAYを渡すとエラーになります。私はかなり確信しています、それは少し構文とは何かですが、私はそのことを理解することができません。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;
私は取得していますエラーが実行に近いですが、私は私はdeclareブロックの内部でプロシージャを実行することになっていないと思うが、私は回避する方法を理解することができません。
はあなたにアレックスに感謝!データ型の実行と間違った宣言は問題でした:) – macha