[pgsql-jp: 37043] Re: Npgsql接続でのストアドプロシージャ起動について

TAKATSUKA Haruka harukat @ epoque.co.jp
2006年 5月 16日 (火) 01:04:30 JST


高塚です。

PostgreSQLのストアドプロシージャは、あくまで「ユーザ定義関数」
なので、関数含めたSELECT文で呼ぶものでは?

"SELECT test22(?, ?)"

など。

# むしろ ODBCで = CALL が通るのに驚きです。すごいですね。


On Mon, 15 May 2006 10:03:42 +0000
"toronet 2002" <toronet2002 @ hotmail.com> wrote:

> 【現象】
>  Npgsqlドライバを利用して、データの参照、更新などは正しく行え
>  ましたがストアドプロシージャを利用しての更新でエラーになります。
>  『syntax error at or near "{" Severity: ERROR Code: 42601』
>  というエラーができます。(ExecuteNonQuery() でエラー)
>  ちなみに、Odbc接続ではこのストアドプロシージャは正しく実行でき
>  DB更新が行えました。
> 
>  NpgsqlでConnectionをオープンし、コマンドでストアド関数(test22)を指定し
>  パラメータを追加後にExecuteNonQuery()で実行するものです。
>  ストアド関数(test22)は、第1パラメータで抽出したレコードを、
>  第2パラメータの内容に更新するものです。戻り値は処理結果コード。
> 
>  Npgsqlでのストアド実行方法を、ご存知の方がおられましたら
>  教えて頂けないでしょうか。初心者の投稿で申し訳ございません。
> 
>  宜しくお願い致します。
> 
> 
> 【コード】
>   NpgsqlConnection conn 
>    = new NpgsqlConnection("Server=localhost;Port=5432; 
>      User Id=postgres;Password=xxxx;Database=testdb;");
> 
>   conn.Open(); // コネクションオープン
> 
>   NpgsqlCommand command = new NpgsqlCommand();
>   command.Connection = conn;
> 
>   try
>   {
>       //------------------------------------------------//
>       // ストアドプロシージャを起動
>       //------------------------------------------------//
>       command.CommandText = "{? = CALL test22(?, ?)}";
>       command.CommandType = CommandType.StoredProcedure;
> 
>       // パラメータの設定
> 
>    // 戻り値
>       command.Parameters.Add("@RetVal",
>         NpgsqlTypes.NpgsqlDbType.Integer); 
>    // パラメータ1
>       command.Parameters.Add("@Name", 
>         NpgsqlTypes.NpgsqlDbType.Char, 40);  
>    // パラメータ2
>       command.Parameters.Add("@Shozoku", 
>         NpgsqlTypes.NpgsqlDbType.Char, 5);
> 
>       command.Parameters["@RetVal"].Direction 
>              = ParameterDirection.ReturnValue; 
>       command.Parameters["@Name"].Value 
>              = textBox2.Text;
>       command.Parameters["@Shozoku"].Value 
>              = textBox1.Text; 
> 
>       // ストアド起動
>       command.ExecuteNonQuery();  // ここでエラーになります


-- 
 TAKATSUKA Haruka / harukat at epoque.co.jp



pgsql-jp メーリングリストの案内