2017-11-28 5 views
0

私はこれを達成しようとしています:行を挿入する際にトリガ/機能付きの値をユーザに問い合わせてください

私はポストグルでトリガ/機能を作成します。挿入する前に、いくつかの行は、特定の値のための何らかのプロンプトウィンドウでユーザーに尋ねます。例えば、私はこれを行うとします

insert into x (a, b, c) values (aa, bb, '');

cはデフォルトでnullになりますが、それを埋めることができ、ユーザを挿入するにする必要があります。空の値を持つ行を挿入すると、ctriggerが呼び出され、ユーザーに入力するように求められます。

可能でしょうか?これを行う最善の方法は何ですか? 私はこのような何かについてthingingた:@VaoはPostgreSQLのトリガーにはプロンプトはありません、述べたように

CREATE FUNCTION my_trigger_function() 
RETURNS trigger AS ' 
BEGIN 
    IF NEW.C1 IS NULL OR NEW.C1 = '''' THEN 
    NEW.C1 := (HERE I WOULD LIKE TO CALL PROMPT WINDOW); 
    END IF; 
    RETURN NEW; 
END' LANGUAGE 'plpgsql' 

CREATE TRIGGER my_trigger 
BEFORE INSERT ON T 
FOR EACH ROW 
    EXECUTE PROCEDURE my_trigger_function() 
+0

postgresトリガーにはプロンプトが表示されません –

答えて

1

。代わりにcustom defined parametersを使用するのはどうですか?

--Sets a run-time configuration parameter 
SELECT set_config('myapp.conf', 'Test', TRUE); 

CREATE FUNCTION my_trigger_function() 
RETURNS trigger AS $$ 
BEGIN 
    --Gets the parameter 
    NEW.C1 := COALESCE(NULLIF(NEW.C1, ''), current_setting('myapp.conf', FALSE)); 
    RETURN NEW; 
END$$ LANGUAGE 'plpgsql'; 

CREATE TRIGGER my_trigger 
BEFORE INSERT ON T 
FOR EACH ROW 
    EXECUTE PROCEDURE my_trigger_function(); 
+0

私の目標が達成できない場合。 'フォーム'から 'php変数 'として値を渡すことはできますか?ですから、私は 'NEW.C1:= $ xyz'を取得しますか? – speedvees

+0

いいえ、あなたはそのようにパラメータを渡すことはできません。しかし、あなたは 'set_config'に渡すことができます... –

+0

この[example](https://stackoverflow.com/a/1247427/7925366)を見てください。 –

関連する問題