-1

列「req」を持つテーブル「xxx」があります。この列「req」では、次の方法で自動的に生成された値を常に取得したいと思います..列「req」値Ref_0001、別の挿入Ref_0002、Ref_0003の後に.... ...最初に試してみます@Craig Ringerへのソリューションthx

CREATE SEQUENCE seq_ref;

CREATE TABLE dossier
        (
        ref TEXT NOT NULL PRIMARY KEY DEFAULT 'ref' || NEXTVAL('seq_ref'),
        value TEXT
        );

数値をゼロで埋めたい場合は、次のようにします。

CREATE SEQUENCE seq_ref;

CREATE TABLE dossier
        (
        ref TEXT NOT NULL PRIMARY KEY DEFAULT 'ref' || LPAD(NEXTVAL('seq_ref')::TEXT, 10, '0'),
        value TEXT
        );

このソリューションは、新しい行の挿入時にアプリケーションプログラムでは正常に機能しません..しかし、pgAdminを使用すると、挿入しようとすると、テーブルを更新するまで列が空になります..トリガーを操作しようとします。

私の問題を解決するために、最終的にPostgreSQLでトリガーを作成します。このフォーム Ref00001、Ref0002 ... の列 req の値を生成していますが、変更されません。それは動作しません; まだ空の列:

CREATE table test(
id serial primary key,
non varchar(12),
req varchar(12)
  );

CREATE OR REPLACE FUNCTION Start_generate() RETURNS trigger AS $emp_stamp$
    BEGIN

      NEW.req := ('ref'::text || lpad((nextval('seq_refcomposant'::regclass))::text, 6, '0'::text));

        return null;
    END;
$emp_stamp$ LANGUAGE plpgsql;

CREATE TRIGGER Generate_ref AFTER INSERT ON test
    FOR EACH ROW EXECUTE PROCEDURE Start_generate();

なぜ機能しないのかわかりません...デフォルトを追加します

NEW.req := DEFAULT  ('ref'::text || lpad((nextval('seq_refcomposant'::regclass))::text, 6, '0'::text));

そして、デフォルトでエラーがあります!

望む効果を得るにはどうすればよいですか?

4

1 に答える 1