[pgsql-jp: 33478] [External mail]pqFlush() -- couldn't send data: errno=0の意味が判りません
並木 勝美
katsumi-namiki @ machida.co.jp
2004年 7月 2日 (金) 18:46:31 JST
PostgreSQL初心者のnamikiです。
PL/pgSQLで多項目のテーブルにインサートするプロシージャを作ってい
ますが、以下のメッセージがでてクリエイトできません。項目数かサイズ
が大き過ぎるようですが、項目を減らしても不明なメッセージが出ます。
恐れ入りますが、何方かアドバイスお願い致します。
環境は、RedHat7.1 PostgreSQL7.3.2、
テーブルは行サイズが2048バイト、項目数105です。
ーーメッセージ(10項目位のテスト時)ーー
SQL実行中に以下のエラーが発生しました。
pqFlush() -- couldn't send data: errno=0
No error
ーー(105項目フル指定の場合)ーー
SQL実行中に以下のエラーが発生しました。
PQsendQuery() -- query is too long. Maximum length is 16382
ーープロシージャ(抜粋)ーー
CREATE OR REPLACE FUNCTION set_mwfmc(text) RETURNS text AS '
DECLARE
ret_status text;
--
tdltflg varchar(1);
tmitseq numeric(6,0);
tmitexno varchar(2);
tmitjcd numeric(6,0);
===以下105項目分
--
loop_item integer;
===以下作業エリア宣言
--
BEGIN
cn_loop_item := 105;
cn_loop_delimiter := 104;
cn_delimiter_dq := ''"'';
===各種変数初期化
--
===以下105項目分の各項目値の抜き出し
WHILE vl_count_segment < vl_text_item LOOP
===一文字抜き出し
st_segment_vl=substr($1,vl_count_segment,1);
st_segment_vl2=substr($1,vl_count_segment+1,1);
--
===以下パターンマッチングによるチェック
IF vl_loop_item > cn_loop_item THEN
ret_proc = ''EI'';
EXIT; /* loop_end */
ELSIF vl_count_segment > vl_text_item THEN
ret_proc = ''EO'';
EXIT; /* loop_end */
--
ELSIF (st_segment_vl = cn_delimiter_dq) AND (st_segment_vl2 = cn_delimiter_lk) AND (vl_count_segment = 2) THEN
ret_proc = ''SP1''; /* mormal_pass */
ELSE
ret_proc = ''SET''; /* mormal_set */
END IF;
--
===以下項目セット
IF ret_proc = ''SET'' THEN
segment_cunter=segment_cunter+1;
set_string=(rpad(set_string,segment_cunter,st_segment_vl));
END IF;
--
===以下105項目別の値セット
IF vl_loop_item = 1 THEN tdltflg = set_string;
ELSIF vl_loop_item = 2 THEN
tmitseq = (to_number(set_string,''999999''));
ELSIF vl_loop_item = 3 THEN tmitexno = set_string;
ELSIF vl_loop_item = 4 THEN
tmitjcd = (to_number(set_string,''999999''));
ELSIF vl_loop_item = 5 THEN
tmkotcd = (to_number(set_string,''99''));
===以下105パターン
ELSIF vl_loop_item >= cn_loop_item THEN
EXIT;
END IF;
--
vl_loop_item = vl_loop_item + 1; /* max_105 */
segment_cunter = 0; /* clear_item-erea*/
set_string = '''';
--
END IF;
END LOOP;
--
INSERT INTO mwfmc (dltflg,mitseq,mitexno,mitjcd,===105項目)
VALUES (tdltflg,tmitseq,tmitexno,tmitjcd,===105項目);
--
===以下略
以上、宜しくお願い致します。
pgsql-jp メーリングリストの案内