それも添付されたコメントも投稿されたコードの明らかな問題に対処していないように見えるため、受け入れられた回答が受け入れられた理由がわかりません。
トリガー本体では、挿入された行の値を:NEW
コード ワードで参照します。投稿されたコードには、WHERE 句で列を参照するときにコロンがありません。これが必要なものです:
CREATE OR REPLACE TRIGGER "propuesta_casas"
BEFORE INSERT ON "PROPUESTA_TIENDA_BARRIO"
FOR EACH ROW
WHEN (new."CASASCAL" IS NULL)
BEGIN
SELECT PROPUESTA.CASAS
INTO :new."CASASCAL"
FROM PROPUESTA
WHERE PROPUESTA.IDPROPUESTA=:new.IDPROPUESTA ;
END;
/
ちなみに、オブジェクトを作成するときは、二重引用符で小文字を使用することに注意してください。
デフォルトでは、すべての Oracle 名は大文字でデータ ディクショナリに格納されますが、SQL ステートメントでは大文字と小文字が区別されません。したがって、次の 2 つのステートメントは同じオブジェクトを参照します。
select * from emp
/
select * from EMP
/
ただし、大文字と小文字が混在する名前または小文字の名前でオブジェクトを作成し、それを二重引用符で囲むと、データ ディクショナリに保存されます。これは、オブジェクトを二重引用符で囲んで参照するときは常に、その正確なケースを使用する必要があることを意味します。したがって、すべて小文字のテーブルを作成すると...
create table "emp" ...
...その後、このステートメントは失敗します:
select * from emp
/
それはする必要があります
select * from "emp"
/
もちろん、すでに EMP というテーブルがある場合、別のテーブルから選択しただけであれば、最初のステートメントは成功します。
トリガーの場合、通常は名前で参照しません。ただし、データ ディクショナリでトリガーを検索するときは常に大文字と小文字を区別する必要があります。
select status
from user_triggers
where trigger_name = 'propuesta_casas'
/