在插入内部选择..值(...)

时间:2014-11-21 20:47:51

标签: sql oracle plsql sql-insert

我有这段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;

它基本上是一个联接。我在MATRICULAORDEM_SERVICO作为FOREIGN KEYVEICULO作为PRIMARY KEY。我在CODIGO_CLIENTE中也有(并且需要)VEICULO,因此加入。然而,它抱怨我在VALUES中做的选择。有什么解决方案吗?

1 个答案:

答案 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仅返回一行和一列。