• 締切済み

ファンクション内での円マークについて

値をカンマ形式で変換するファンクションを作成しています。 ファンクションの内容は下記の通りです。 CREATE FUNCTION Test (DECIMAL) RETURNS VARCHAR(15) AS ' DECLARE arg ALIAS FOR $1; str VARCHAR(16); BEGIN str := ''''; SELECT TRIM(TO_CHAR(arg, ''\\9,999,999,999'')) INTO str; RETURN str; END; ' language 'plpgsql' ; 上記のコマンドを実行したらワーニングが出力されました。 下記が出力したワーニングの内容です。 WARNING: nonstandard use of \\ in a string literal 行 2: ' ^ HINT: Use the escape string syntax for backslashes, e.g., E'\\'. WARNING: nonstandard use of escape in a string literal 行 1: SELECT TRIM(TO_CHAR( $1 , '\9,999,999,999')) ^ HINT: Use the escape string syntax for escapes, e.g., E'\r\n'. QUERY: SELECT TRIM(TO_CHAR( $1 , '\9,999,999,999')) CONTEXT: SQL statement in PL/PgSQL function "test" near line 6 CREATE FUNCTION ※一応、ファンクションは作成できたんですで・・・ ファンクションを実行したらワーニングと結果が出力されました。 SELECT test(10000); 下記が出力したワーニングの内容です。 WARNING: nonstandard use of escape in a string literal 行 1: SELECT TRIM(TO_CHAR( $1 , '\9,999,999,999')) ^ HINT: Use the escape string syntax for escapes, e.g., E'\r\n'. QUERY: SELECT TRIM(TO_CHAR( $1 , '\9,999,999,999')) CONTEXT: PL/pgSQL function "test" line 6 at SQL statement test -------- 10,000 (1 行) 下記のように円マークの箇所にEをつけたりしましたがワーニングが解消する事はできませんでした。多分、私の記述がいけないような気がします。 すみませんがどのように記述すればいいのでしょうか。 ご教授いただけませんでしょうか。 宜しくお願いします。

みんなの回答

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

バージョンが分かりませんがこんなんでとうですか。 CREATE or REPLACE FUNCTION Test (DECIMAL) RETURNS VARCHAR(15) AS $$ DECLARE arg ALIAS FOR $1; BEGIN RETURN TRIM(TO_CHAR(arg, E'FM\\9,999,999,999')); END; $$ language plpgsql;

j-unico
質問者

補足

回答ありがとうございます。 説明不足で申し訳ありませんでした。 私が使用しているPostgreSQLのバージョンは下記の通りです。 PostgreSQL 8.4.9 on i386-redhat-linux-gnu, compiled by GCC gcc (GCC) 4.4.5 20110214 (Red Hat 4.4.5-6), 32-bit nara1962さんのいただいたアドバイスを元に下記のようにファンクションを修正して実行したらワーニングが発生しました。 ※ワーニングが発生しましたがファンクションは作成されました。 CREATE FUNCTION test (DECIMAL) RETURNS VARCHAR(15) AS ' DECLARE arg ALIAS FOR $1; str VARCHAR(16); BEGIN str := ''''; SELECT TRIM(TO_CHAR(arg, E''FM\\9,999,999,999'')) INTO str; RETURN str; END; ' language 'plpgsql' ; 下記が出力したワーニングの内容です。 WARNING: nonstandard use of \\ in a string literal 行 2: ' ^ HINT: Use the escape string syntax for backslashes, e.g., E'\\'. CREATE FUNCTION ファンクションを実行した結果です。 ※ワーニングは出力されませんでした。 SELECT test(10000); test -------- 10,000 (1 行) 再度、アドバイスいただけませんでしょうか。 宜しくお願いします。

関連するQ&A

  • CSEでのデータベース作成時のエラーについて

    こんばんは。 PostgreSQLについて質問させてください。 CSEを使ってSQLの勉強をしていますが、 データベースを作成した際に、 WARNING: nonstandard use of escape in a string literal at character 42 WARNING: LOCATION is not supported anymore という表示がされ、 その後、テーブル作成などをすると エラーになり実行できません。 例えば、 create table テーブル名( id number(8) primary key, name char(10), birth date ) ; を実行した際に、 SQL実行中に以下のエラーが発生しました。 ERROR: syntax error at or near "(" at character 32 というエラーになります。 この原因は、Encodingの問題だと思っていますが、 どのように解決したらいいか教えてください。 また、Encodingの問題ではない場合は その際の対処法を教えてください。 以上、ご回答のほどお願いいたします。

  • Functionの使い方が分かりません。

    ACCESS 2013環境でVBAを使用しています。 プログラムが長い上、使用する箇所が多くて困っています。 Functionで、使いたい時だけ呼び出したいのですが うまく行きません。 二つのテキストボックスに入力された、文字を組み合わせて 文字列を生成するプロシージャを作成しています。  txt1の値が、岡山  txt2の値が、オカヤマ の時 先頭の文字列が ア行、続きは _岡山 となるよう AscW関数で文字コードで一度抽出し, select文で判別しています。 コードは --------------------------------------------- Private Sub コマンド1_Click() Dim kanji As String Dim katakana As Integer Dim sento As String Dim hensuu As String kanji = Me.txt1 katakana = AscW(Left(Me.txt2,1)) Select Case katakana Case 12450 To 12458 sento = "ア行" Case 12459 To 12468 sento = "カ行" ~(中略)~    Case Else End Select hensuu = sento & "_" & kanji MsgBox hensuu End Sub --------------------------------------------- となっています。 Select Case文が長いのと、複数のフォーム上で実行させるボタンごとに 同じコードを記述していて、最近Accessの起動が遅くなってきました。 Select文をFunctionから呼び出し、最終的にはモジュールから呼び出しに 書き換えたいのですが、書き方が良く分かりません。 試したコード --------------------------------------------- Function moji(ByRef katakana As Integer,sento As String) Select Case katakana Case 12450 To 12458 sento = "ア行" Case 12459 To 12468 sento = "カ行" ~(中略)~    Case Else End Select End Function Private Sub コマンド1_Click() Dim kanji As String Dim katakana As Integer Dim sento As String Dim hensuu As String kanji = Me.txt1 katakana = AscW(Left(Me.txt2,1)) sento = moji(katakana) hensuu = sento & "_" & kanji MsgBox hensuu End Sub --------------------------------------------- 多分、大きく間違っているのではないかと思うのですが どのように修正したらよいでしょうか

  • ストアドファンクションのエラーについて

    PostgreSQLでストアドファンクションを作成しました。 ファンクションの内容は下記の通りです。 CREATE FUNCTION getRenban (VARCHAR) RETURNS VARCHAR(7) AS ' DECLARE key ALIAS FOR $1; code VARCHAR(7); code2 VARCHAR(2); code5 VARCHAR(5); renban INTEGER; new_code VARCHAR(7); BEGIN SELECT MAX(code) INTO code FROM M_ITEM WHERE flg = 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 お恥ずかしいですがいくらコードを見てもどこが原因なのかわかりません。 申し訳ありませんがご教授お願いできませんでしょうか。 昨日から悩んでいます。 どうか助けて下さい、宜しくお願いします。

  • DLLを作成してVBAから使用する方法は?

    Visual Basic 2005 Express EditionでDLLを作成して,エクセルVBAから使用する方法を教えてください。 DLLで提供する関数は,仮に Public Function TRIM2(ByVal str1 As String) As String TRIM2 = trim(str1) End Function とします。 DLLの作り方とエクセルVBAでの利用のやり方が判りません。 一応,DLLらしきものを作りエクセルVBAから参照を試みましたが,「指定されたファイルへの参照は登録できません。」というエラーになります。

  • String型をchar型配列にしたい

     VC++2005ExpressEdition + PlatformSDKを使用しています.  String型をchar型配列に変換したいと思っています.  自分なりに調べてみたのですが, > String^ str = gcnew String("test"); > char chr[5]; > chr = str->ToCharArray(); などとしても次のようなエラーが出ます. > error C2440: '=' : 'cli::array<Type,dimension> ^' から 'char [5]' に変換できません。  String型からchar型配列への変換はどのようにすればいいのでしょうか.

  • エラーがとれません 助けてください

    エラーがとれません 助けてください http://cs.fit.edu/~mmahoney/dist/eval4.cpp をコンパイルすると eval4.cpp: In member function ‘bool Attack::read(FILE*)’: eval4.cpp:105: error: ‘strlen’ was not declared in this scope eval4.cpp:114: error: ‘strchr’ was not declared in this scope eval4.cpp: In function ‘int main(int, char**)’: eval4.cpp:132: warning: deprecated conversion from string constant to ‘char*’ eval4.cpp:133: warning: deprecated conversion from string constant to ‘char*’ eval4.cpp:134: warning: deprecated conversion from string constant to ‘char*’ eval4.cpp:183: error: ‘strlen’ was not declared in this scope のようなエラーがでてしまいます。 Ubuntuのg++でコンパイルしています。 なにがまずいのでしょうか?

  • pg_dumpallのバックアップとリストアについて

    現在当方、postgresql-8.2.11にてDBサーバを構築しております。 そろそろ、マシン自体も古くなってきたので載せ替えをしようと 試みているのですが、うまく行きません。。。 新しいマシンにはpostgresql-8.4.0をインストールしました。 旧サーバからpg_dumpallにて全データをダンプして新サーバへ リストアしたのですが、serverlogに下記のログが出てきて、 pgadmin3の様な接続ソフトから接続できません。 WARNING: nonstandard use of \\ in a string literal at character 70 HINT: Use the escape string syntax for backslashes, e.g., E'\\'. ERROR: column c.reltriggers does not exist at character 240 STATEMENT: SELECT c.oid, obj_description(c.oid), c.relhasoids as hasoids, n.nspname AS schemaname, c.relname AS tablename, pg_get_userbyid(c.relowner) AS tableowner, t.spcname AS "tablespace", c.relhasindex AS hasindexes, c.relhasrules AS hasrules, (c.reltriggers > 0) AS hastriggers, c.relacl, c.reltuples, ((select count(*) from pg_inherits where inhparent = c.oid) > 0) as inhtable FROM ((pg_class c LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) LEFT JOIN pg_tablespace t ON ((t.oid = c.reltablespace))) WHERE (c.relkind = 'r'::"char") リストア後は正常にデータベースもできていますし、テーブルの内容も 問題なくリストアされているようでした。 ダンプされたファイルも秀丸にて確認してみましたが問題ないようでした。 どなたか何か情報をお持ちであれば教えてください。 よろしくお願いいたします。

  • エクセルマクロで

    いつもお世話になります mythism様に教えていただいた下記マクロについて もう1つ教えていただきたいのですが t = 3 While Cells(t, 3).Value <> "" t = t + 1 Wend If 1 < t Then Range("c3:n" & Trim(Str(t - 1))).Locked = True End If Range("c" & Trim(Str(t)) & ":n" & Trim(Str(t + 99))).Locked = False Range("c" & Trim(Str(t)) & ":n" & Trim(Str(t))).Interior.ColorIndex = 36 最後の行に黄色の塗りつぶしをしてうまくいきました 塗りつぶしの次の行のE列に Range("E19").Select  19行になったとして VLOOKUPをいれたいのですが ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-4],漁師名!R2C3:R31C4,2,FALSE)" Range("E19").Selectの部分は どうしたらいいでしょうか よろしくお願いいたします

  • エクセルVBAのFunction簡素化したいのです・・・。

    時間により挨拶の内容を変えるCODEを作りました。一応、当初の目的どおりのは答えを返すのですが、時間と分で2つFunctionが出来てしまいます・・・・。 あと、もっとスマートなやり方はないものかと質問させていただきました。 くだらないと思われそうですがなにとぞよろしくお願いします。 Sub 挨拶test() MsgBox hmsg(Time) & Chr(10) & messe(Time), , "*・゜゜・*:.。. .。.:*・゜゜・*" End Sub Function messe(t) As String t2 = Hour(t) t3 = Hour(TimeValue(t) + TimeValue("01:00")) m = Minute(t) Select Case m Case Is < 15: messe = t2 & "時を回りましたね。 。(^o^)/" Case Is < 30: messe = "もうすぐ" & t2 & "時半になりますね。 (〃^∇^〃) " Case Is < 45: messe = t2 & "時半を過ぎてますね。 (=´▽`)ゞ" Case Else: messe = "もうすぐ" & t3 & "時になるんですね。(^∇^)" End Select End Function Function hmsg(t) As String Select Case Hour(t) Case Is <= 11: hmsg = "おはようございます。" Case Is < 17: hmsg = "こんにちは。" Case Else: hmsg = "こんばんは。" End Select hmsg = UCase(Environ("UserName")) & "さん、" & hmsg End Function

  • trim()メソッドの使用方法とキャストの仕方について

    こんばんは、今回はtrim()メソッドの使用方法とキャストの方法についてお伺い致します。 trimメソッドを使用して文字列の前後の空白を削除したいのですが、 通常 String str = " 「こんにちは」"; str = str.trim(); とコーディングしコンパイルして表示するとちゃんと「こんにちは」となるのすですが、これが ArrayList list = new ArrayList(); BufferedReader br= new BufferedReader(new FileReader(Test.txt); while((str = br.readLine()) !=null){ str = str.trim(); list.add(str); } br.close(); とコーディングしコンパイルは通るのですが、 「こんにちは」のままで"「"の前にある空白が削除されてません。 私なりに「型」の違いでが原因ではないかと思い、java.io.ArrayList型からjava.lang.String型へキャストしようとしているのですが、コンパイルエラーが出てしまします。 プログラムコードは ArrayList list = new ArrayList(); String s; s = (String)list; としています。 エラー内容は ScheduleControlCall.java:142: 変換できない型 出現: java.util.ArrayList 要求: java.lang.String s = (String)list; ^ エラー 1 個 となっています。 度々ですが、ご指導お願い致します。

    • ベストアンサー
    • Java