1

メンバーというテーブルがあります

CREATE TABLE netcen.mst_member
(
  mem_code character varying(8) NOT NULL,
  mem_name text NOT NULL,
  mem_cnt_code character varying(2) NOT NULL,
  mem_brn_code smallint NOT NULL, -- The branch where the member belongs
  mem_email character varying(128),
  mem_cell character varying(11),
  mem_address text,
  mem_typ_code smallint NOT NULL,
  CONSTRAINT mem_code PRIMARY KEY (mem_code ))

各メンバータイプには、メンバーコードの異なるシーケンスがあります。つまり、ゴールドメンバーの場合、メンバーコードは次のようになります。

GLD0091、GLD0092、..。

プラチナメンバーコードは

PLT00020、PLT00021、..。

選択したメンバータイプに応じて、フィールドmem_codeのデフォルト値を動的な値として使用したいと思います。チェック制約を使用してそれを実装するにはどうすればよいですか?助けてください、Postgresql9.1を使用しています

文字列を作成するために次のトリガー関数を作成しましたが、Randyが言ったように、membersテーブルに挿入するとエラーが発生します。

CREATE OR REPLACE FUNCTION netcen.generate_member_code()
  RETURNS trigger AS
$BODY$DECLARE 
tmp_suffix text :='';
tmp_prefix text :='';
tmp_typecode smallint ;
cur_setting refcursor;
BEGIN
OPEN cur_setting FOR
EXECUTE 'SELECT typ_suffix,typ_prefix,typ_code FROM mst_member_type WHERE type_code =' || NEW.mem_typ_code ;
FETCH cur_setting into tmp_suffix,tmp_prefix,tmp_typecode;
CLOSE cur_setting;
NEW.mem_code:=tmp_prefix || to_char(nextval('seq_members_'|| tmp_typecode), 'FM0000000') || tmp_suffix;
END$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION netcen.generate_member_code()
  OWNER TO mnoma;

どこが間違っているのでしょうか?次のエラーが発生します

ERROR:  relation "mst_member_type" does not exist
LINE 1: SELECT typ_suffix,typ_prefix,typ_code FROM mst_member_type W...
                                                   ^
QUERY:  SELECT typ_suffix,typ_prefix,typ_code FROM mst_member_type WHERE typ_code =1
CONTEXT:  PL/pgSQL function "generate_member_code" line 7 at OPEN
4

1 に答える 1

3

これは正規化の問題だと思います。

あなたが提供するコードは他の情報から導き出すことができます-したがって、実際には独立した列として属していません。

タイプを1つの列に格納し、数値を別の列に格納するだけで、必要に応じてクエリでそれらを一緒に追加して、このコンボコードを作成できます。

この非正規化されたソリューションを永続化する場合は、任意の挿入または更新で文字列を作成するトリガーを作成できます。

于 2013-01-14T13:58:38.263 に答える