質問: trim($1); code2 := trim($1); if code is null then renban := 1; else select substr(code, 2) into code5; select to_number(code5, ''99999'') into renban; renban := renban + 1; end if; code5 := ''''; select to_char(renban, ''00000'') into code5; select code2 || code5 into new_code; return new_code; end; ' language 'plpgsql' ; コンソール上で下記のコマンドを実行したらエラーが出力されました。 select getrenban('01'); 出力されたエラーの内容は下記の通りです。 error: value too long for type character varying(5) context: pl/pgsql function "getrenban" line 19 at sql statement お恥ずかしいですがいくらコードを見てもどこが原因なのかわかりません。 申し訳ありませんがご教授お願いできませんでしょうか。 昨日から悩んでいます。 どうか助けて下さい、宜しくお願いします。
回答: >error: value too long for type character varying(5) >context: pl/pgsql function"getrenban" line 19 at sql statement line 19と言う事は code5 := ''''; select to_char(renban, ''00000'') into code5; ↑ この辺ですよね。 で、「長過ぎてvarchar(5)に入れられない」と怒られています。 pl/pgsqlは実務で使った事がないのですが、オラクルのpl/sqlの観点で回答します。 5桁の数字が入ったintegerの変数をto_charすると結果は6桁になります。 +-が一桁付加されるからです。 (正の場合は半角スペース) なので「長過ぎてvarchar(5)に入れられない」と怒られたわけです。 代入時にスペースをトリムすれば解決します。 それと、クリア時のダブルクォートが気になりましたが、コンパイルが通っているので、これは問題無いのでしょうね。