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

yukihito miso mail @ rishiri.info
2011年 5月 3日 (火) 17:26:42 JST


ありがとうございます。

> 複文を使わず、関数やSQLごとにコマンドを分ける必要があるのでは
> ないでしょうか? また、PostgreSQL に限っては、SQLからストアドが
> 実行できるので、関数呼び出しすべてに SELECT を付け、
> 普通のSQLとして実行する手もあるかもしれません。


SELECT create_tmp_records1(var_col_TIME_function('11'));
SELECT insert_tmp_records1(var_col_TIME_sub_function('11'));
SELECT create_tmp_records2(var_col_TIME_function('11'));
SELECT insert_tmp_records2(var_col_COALESCE_sub_function('11'), '11');
SELECT create_tmp_records3(var_col_TIME_function('11'));
SELECT insert_tmp_records3(var_col_function('11'), '11');
SELECT create_tmp_records4(var_col_TIME_function('11'));
SELECT insert_tmp_records4(var_col_function('11'), '11');
SELECT create_tmp_records5(var_col_TIME_function('11'));
SELECT insert_tmp_records5(var_col_function('11'), '11');
SELECT create_tmp_records(var_col_TIME_function('11'));
SELECT insert_tmp_records(var_col_function('11'));
SELECT update_tmp_records4(var_col_function('11'));
SELECT update_tmp_records5(var_col_function('11'));
SELECT * FROM tmp_records;
のように引数部分に値を直接書いてpgAdmin3からSQLで実行すると
出力ビューには結果のレコードが表示されます。

そこで、同じように今度はパラメータ(:n_id)を用いて
C#に書いて実行させようとしていますが
:n_idのような書き方が構文エラーになるのか(Npgsqlかストアドか)
パラーメータが認識されていないためか
ERROR: 42601: syntax error at or near ":"
で
     da.Fill(ds, "results");の部分でエラーになってしまいます。

よろしくお願いします。

以下が、エラーになるコードです。

    public partial class FormReportsResults : Form
    {
  private NpgsqlConnection m_conn = new 
NpgsqlConnection(PostgreSQLTEst.Properties.Settings.Default.PostgresConnect);
   // (接続は間違いなくできています)
   private NpgsqlDataAdapter da = new NpgsqlDataAdapter();
   private DataSet ds = new DataSet();
    public FormReportsResults()
     {
    InitializeComponent();
     }
     private void FormReportsResults_Load(object sender, EventArgs e)
            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));"
                + "SELECT 
create_tmp_records2(var_col_TIME_function(:n_id));"
                + "SELECT 
insert_tmp_records2(var_col_COALESCE_sub_function(:n_id), :n_id);"
                + "SELECT 
create_tmp_records3(var_col_TIME_function(:n_id));"
                + "SELECT insert_tmp_records3(var_col_function(:n_id), 
:n_id);"
                + "SELECT 
create_tmp_records4(var_col_TIME_function(:n_id));"
                + "SELECT insert_tmp_records4(var_col_function(:n_id), 
:n_id);"
                + "SELECT 
create_tmp_records5(var_col_TIME_function(:n_id));"
                + "SELECT insert_tmp_records5(var_col_function(:n_id), 
:n_id);"
                + "SELECT create_tmp_records(var_col_TIME_function(:n_id));"
                + "SELECT insert_tmp_records(var_col_function(:n_id));"
                + "SELECT update_tmp_records4(var_col_function(:n_id));"
                + "SELECT update_tmp_records5(var_col_function(:n_id));"
                + "SELECT * FROM tmp_records;",
                    m_conn
            );
     da.Fill(ds, "results"); ' ←ここでエラー
     CrResults myReport = new CrResults();
     myReport.SetDataSource(ds);
     CrvResults.ReportSource = myReport;
        }



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