2017-06-21 8 views
0

私はtruncateを実行してテーブルに行を挿入するpostgres sql関数を作成しました。構文エラー LINE 6時または近くに "車"::VALUES( '車'、2 ^ CREATE FUNCTIONpostgres sql関数(truncateとinsertを使用)

下記の機能

CREATE OR REPLACE FUNCTION reset_Default()   
RETURNS VOID AS ' 
BEGIN 
     TRUNCATE TABLE details; 
     INSERT INTO details values('car',2); 
     INSERT INTO details values('bus',4); 


     RETURN; 
END;  
' LANGUAGE 'plpgsql'; 

しかし、イムは

ERRORエラーの下になっては、エラー:既存の関数の戻り値の型を変更することはできません。

ヒント:まずDROP FUNCTIONを使用してください。

その理由を知ることはできますか?

答えて

1

なぜあなたはあなたの機能の本体を一重引用していますか?これはうまくいくかもしれませんが、あなたが経験しているような問題を引き起こす可能性があります。ワイルド・クラスターの州はドル記号を使用しているため。その後、関数は正常にコンパイルされます。

例えば

CREATE OR REPLACE FUNCTION reset_Default()   
RETURNS VOID AS $$ 
BEGIN 
    TRUNCATE TABLE details; 
    INSERT INTO details values('car',2); 
    INSERT INTO details values('bus',4); 
RETURN; 
END;  
$$ LANGUAGE plpgsql; 
0

文字列内の一重引用符を二重にする必要があります。したがって:

CREATE OR REPLACE FUNCTION reset_Default()   
RETURNS VOID AS ' 
BEGIN 
    TRUNCATE TABLE details; 
    INSERT INTO details(col1, col2) values(''car'',2); -- use actual column names 
    INSERT INTO details(col1, col2) values(''bus'',4); 

    RETURN; 
END;  
' LANGUAGE 'plpgsql' 
+4

または関数本体用のドル引用符を使用します。 – wildplasser

関連する問題