我有这段sql代码。当ORDER_SERVICE中的STATE被更改INSERTING到一个名为sms的表sms_number(它是一个序列)和CODIGO_CLIENTE时,它是一个触发器。我有这个:
create or replace TRIGGER ENVIAR_SMS
AFTER UPDATE ON ORDEM_SERVICO
FOR EACH ROW
BEGIN
IF UPDATING
THEN
IF ( NOT :NEW.ESTADO = :OLD.ESTADO)
THEN
INSERT INTO SMS(N_SMS, CODIGO_CLIENTE)
VALUES (SEQ_SMS.NEXTVAL, SELECT CODIGO_CLIENTE
FROM ORDEM_SERVICO,
VEICULO
WHERE ORDEM_SERVICO.MATRICULA=VEICULO.MATRICULA);
END IF;
END IF;
END;
它基本上是一个联接。我在MATRICULA
中ORDEM_SERVICO
作为FOREIGN KEY
,VEICULO
作为PRIMARY KEY。我在CODIGO_CLIENTE
中也有(并且需要)VEICULO
,因此加入。然而,它抱怨我在VALUES中做的选择。有什么解决方案吗?
答案 0 :(得分:3)
简单地用括号括起select
:
INSERT INTO SMS(N_SMS, CODIGO_CLIENTE)
VALUES (SEQ_SMS.NEXTVAL
, (SELECT CODIGO_CLIENTE
FROM ORDEM_SERVICO, VEICULO
WHERE ORDEM_SERVICO.MATRICULA = VEICULO.MATRICULA)
)
另外,请确保select
仅返回一行和一列。