1

Postgres 関数を作成しようとしています。初めてやるので、ばかげた間違いを見つけてもイライラしないでください:

CREATE  FUNCTION proc_test(userId int)
returns void 
begin
UPDATE pl_payroll SET remarks =viw.remarks from pl_payroll   
diff,viwPayDifference viw 
where diff.userid = cast(userId as varchar); 
end;

のようなエラーを出しています

「begin」またはその付近で構文エラーが発生しました

ここで何が問題なのですか?

4

1 に答える 1

2

SQL関数BEGINにはand ENDlike plpgsqlfunctionsがありません。

CREATE FUNCTION proc_test(userId int)
  RETURNS void AS
$func$
UPDATE pl_payroll
SET    remarks = viw.remarks
FROM   pl_payroll diff, viwPayDifference viw
WHERE  diff.userid = cast(userId as varchar);
$func$ LANGUAGE sql;

あなたもそれ自体が間違っているUPDATEように見えます。

  • pl_payroll追加のテーブルに結合する WHERE 条件はありません。
  • 2回目以降のご参加は不要ですpl_payroll
  • の 2 番目のオカレンスuserIdはテーブル修飾されておらず、おそらくあいまいです。

UPDATEマニュアルで構文を確認してください。次のようになります。

CREATE FUNCTION proc_test(userId int)
  RETURNS void AS
$func$
UPDATE pl_payroll p
SET    remarks = viw.remarks
FROM   viwPayDifference viw
WHERE  viw.userid = p.userId::varchar;
$func$ LANGUAGE sql;

余談ですが、 にキャストdiff.userIdする必要があるのは非常に疑わしいようですvarchar。ベース テーブルのデータ型に問題がありますか?

于 2012-12-28T07:54:46.817 に答える