お世話になっております。
ADOStoredProcを使って、テキストボックスに入力した顧客番号を、
ストアドへ渡し顧客名を取得する単純なものなのですが、
下記のエラーが出て困っています。
ご教授お願いできませんでしょうか。
環境:
Delphi2005
Oracle10g
WinXp
■エラーメッセージ
ORA-06550: 行1、列7:
PLS-00306: 'FNCCUSTNAME_GET'の呼び出しで、引数の数または型が正しくありません。
ORA-06550: 行1、列7:
PL/SQL: Statement ignored.
■ストアド
CREATE OR REPLACE FUNCTION fncCustName_Get(param_cust_no IN customer.cust_no%TYPE)
RETURN VARCHAR2
AS
ret_cust_name customer.cust_name%TYPE;
BEGIN
select cust_name into ret_cust_name
from customer
where cust_no = param_cust_no;
RETURN(ret_cust_name);
EXCEPTION
when no_data_found then
RETURN(-1);
END fncCustName_Get;
/
■SQL*Plusで実行すると
set serveroutput on
declare
disp_cust_name varchar2(48);
begin
disp_cust_name:= fncCustName_Get(3027);
dbms_output.put_line(disp_cust_name);
end;
/
顧客名は取得できます。
■デルファイソース
procedure TfrmStoredProc.btnCustNameClick(Sender: TObject);
var
intCustNo:integer;
begin
try
intCustNo:=strToInt(edtCustNo.Text);
with DMStoredProc.ADOStoredProc1 do
begin
Connection:= ADOCnn;
ProcedureName := 'fncCustName_Get';
Parameters.Clear;
Parameters.CreateParameter('param_cust_no',ftInteger,pdInput,0,intCustNo);
Parameters.CreateParameter('ret_cust_name',ftString,pdReturnValue,48,null);
ExecProc; //open;でも同様のエラーが発生します。
lblCustName.Caption:=
VarToStr(Parameters.ParamByName('ret_cust_name').Value);
end;
except
on E: Exception do MessageDlg(E.Message, mtWarning, [mbOK], 0);
end;
end;
ストアドへパラメータが渡されていないのですが、
ヘルプやデモファイルを見ると
paNullable
paLong
paSigned
などのプロパティ?があり、
設定不足かと考えていますが分かりません。
どうぞ宜しくお願いします。
>>Parameters.CreateParameter('param_cust_no',ftInteger,pdInput,0,intCustNo); >>Parameters.CreateParameter('ret_cust_name',ftString,pdReturnValue,48,null);
の部分が上下逆かな。外していたらごめんなさい。
お世話になります。
通りすがおさん。どうもありがとうございます。
パラメータを作る順を上下逆にすると、なんのエラーも無く、
期待通りに顧客名が帰ってきました。
リターンを先に指定して、インプットを後に指定するのは、
考えもつきませんでした。
実を言うと、だまされたと思ってやるだけやってみようと、
試してみたのです。
うたがってごめんなさい。恥ずかしく思います。
因みに、オブジェクトインスペクタで、
ADOStoredProcのAttibutesプロパティ3つは共に初期値falseのままです。
paSigned
paNullable
paLong
どうもありがとうございました。
ツイート | ![]() |