char配列を入力として渡すECPGインターフェイスからpostgresストアド関数を呼び出そうとしています。 カーソルを開こうとすると、現在、「引数が少なすぎます」というメッセージが表示されています。 関連抜粋:準備されたステートメントの配列引数を使用したストアドプロシージャのECPG呼び出し
ECPG file:
EXEC SQL BEGIN DECLARE SECTION;
const char* cid = connid;
const char* stmt = NULL;
char tgrpkey[64]; // group key
char ccakey[64]; // call control agent key
char dhostkey[64]; // dest host key
char regusrkey[64]; // Registration user
EXEC SQL END DECLARE SECTION;
stmt = SELECT * FROM sipbasicquery(:ccakey::char[],:tgrpkey::char,:dhostkey::char[],:regusrkey::char[])";
EXEC SQL AT :cid PREPARE pstmt FROM :stmt;
EXEC SQL AT :cid DECLARE cur CURSOR FOR pstmt;
EXEC SQL AT :cid OPEN cur;
EXEC SQL AT :cid FETCH NEXT FROM cur INTO DESCRIPTOR sqlda;
保存された機能は、私のサーバー上に存在し、次のシグネチャがあります。
CREATE OR REPLACE FUNCTION sipbasicquery(cca character[], tgrp character[],
dhost character[], usr character[])
RETURNS SETOF sipbasinfo AS $$
引数エラーが少なすぎる理由はありますか?
[23064]: prepare_common on line 110: name pstmt; query: "SELECT * FROM sipbasicquery($1::char[],$2::char[],$3::char[],$4::char[])"
[23064]: raising sqlcode -202 on line 117: too few arguments on line 117
引数は、私のストアドプロシージャと一致するように見える:ECPGデバッグで
は、障害がどのように見える有効。なぜあまりにも少ない? ありがとうございますが、それ自体がホスト変数(:stmt
)に格納されたクエリでホスト変数(:ccakey
など)を使用することはできません
デイブ
私の問題の一部だったおかげで、ピーターは、。別の問題は、カーソルが実際に開かれたときに、 "USING"節を使用してHOST変数を参照しなければならないことでした。これは進歩ですが、今はエラーが残っています。 "配列は" {"または次元で始まる必要があります。 – Dave