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