[pgsql-jp: 40759] Re: ストアドファンクションの順次実行

Tomoaki Sato sato @ sraoss.co.jp
2011年 5月 2日 (月) 10:31:13 JST


佐藤です。

> お世話になっております。
> よろしくお願いいたします。
> 
> FreeBSD 8.2 + PostgreSQL 9.0.4 + Npgsql
> Windows 7 Pro + VS 2010 C# Proです。
> 
> イメージとしては
> 一時テーブルを作成
> 一時テーブルにインサート
> をストアドファンクションを順次実行し繰り返す
> その結果をFillしてCrystalReportsに渡したいのですが
> デバッグすると
> 
>             da.Fill(ds, "results");の部分で
> 
>   syntax error at or near "insert_tmp_records1"
> 
> でエラーになって止まります。
> ストアドを順次実行する部分が間違っているのかと
> 思っているのですが、Npgsql: ユーザマニュアル等を
> 参考にしているのですが、解決に至っておりません。
> どなたか誤りをご指摘いただければと思います。

あまり Npgsql について詳しくないのですが、関数の呼び出し方が誤っている
と思います。

            da.SelectCommand = new NpgsqlCommand
            (
                "SELECT create_tmp_records1(var_col_TIME_function(:n_id));"
               + "SELECT insert_tmp_records1(var_col_TIME_sub_function(:n_id));"
               :

> 
>             da.SelectCommand = new NpgsqlCommand
>             (
>                 "create_tmp_records1(var_col_TIME_function(:n_id));"
>                + "insert_tmp_records1(var_col_TIME_sub_function(:n_id));"
>                + "create_tmp_records2(var_col_TIME_function(:n_id));"
>                +
> "insert_tmp_records2(var_col_COALESCE_sub_function(:n_id), :n_id);"
>                + "create_tmp_records3(var_col_TIME_function(:n_id));"
>                + "insert_tmp_records3(var_col_function(:n_id), :n_id);"
>                + "create_tmp_records4(var_col_TIME_function(:n_id));"
>                + "insert_tmp_records4(var_col_function(:n_id), :n_id);"
>                + "create_tmp_records5(var_col_TIME_function(:n_id));"
>                + "insert_tmp_records5(var_col_function(:n_id), :n_id);"
>                + "create_tmp_records(var_col_TIME_function(:n_id));"
>                + "insert_tmp_records(var_col_function(:n_id));"
>                + "update_tmp_records4(var_col_function(:n_id));"
>                + "update_tmp_records5(var_col_function(:n_id));"
>                + "SELECT * FROM tmp_records;",
>                     m_conn
>             );
>             da.SelectCommand.CommandType = CommandType.StoredProcedure;
> 
>             if (cmb_n_id.SelectedItem == null)
>             {
>                 da.SelectCommand.Parameters.Add(new NpgsqlParameter("n_id",
>                 NpgsqlTypes.NpgsqlDbType.Integer, 0, "n_id",
>                 ParameterDirection.Input, false, 0, 0, DataRowVersion.Current,
>                 DBNull.Value));
>             }
>             else
>             {
>                 DataRowView row = (DataRowView)cmb_n_id.SelectedItem;
>                 da.SelectCommand.Parameters.AddWithValue("n_id", row["n_id"]);
>             }
> 
>             da.Fill(ds, "results");
>             CrResults myReport = new CrResults();
>             myReport.SetDataSource(ds);
>             CrvResults.ReportSource = myReport;

----
Tomoaki Sato <sato @ sraoss.co.jp>
SRA OSS, Inc. Japan


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