[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 メーリングリストの案内