带有Case Select的Oracle SQL Insert

时间:2014-02-27 20:30:33

标签: sql oracle if-statement insert

我是这个网站的新手,我有另一个问题。在这种情况下,它来自Oracle SQL,带有CASE的插入操作 我的SQL插入代码是:

INSERT WHEN (SELECT TB0083_DS_TIPODISPOSITIVO FROM TB0083_TIPODISPOSITIVO WHERE TB0083_ID_TIPODISPOSITIVO = (SELECT FOR_DISPOSITIVO FROM TFORPD01 WHERE FOR_CODIGO = &FORNECEDOR))='TIV' THEN
INTO TTRAPD01 (TRA_CODIGO,TRA_CODBARRA,TRA_CODLOC,TRA_CODCON,TRA_DATLOC,TRA_CODCAIXA,TRA_STATCOND,TRA_DT_CRIACAO,TRA_NM_USUARIOCRIACAO,TRA_DT_ALTERACAO,TRA_NM_USUARIOALTERACAO,TRA_CD_CONTA,TRA_CODCTR,TRA_TRANSACAO_ONLINE,TRA_TIV_HEXA,TRA_TIV_BINARIO,TRA_CD_DISPOSITIVO,TRA_DATSINC,TRA_ID_TPSEGREG,TRA_FORNECEDOR,TRA_STATUS) 
VALUES (&NUMEROIDENTIFICADOR,&CODIGOBARRAIDENTIFICADOR,&CODIGOPONTOVENDALARM,259,SYSDATE,&CODIGOCAIXA,0,SYSDATE,&USUARIOLOGUEADO,SYSDATE,&USUARIOLOGUEADO,422,1,0,&TIVHEXA,&TIVBINARIO,423,SYSDATE,3,&FORNECEDOR,1)
ELSE
INTO TTRAPD01 (TRA_CODIGO,TRA_CODBARRA,TRA_CODLOC,TRA_CODCON,TRA_DATLOC,TRA_CODCAIXA,TRA_STATCOND,TRA_DT_CRIACAO,TRA_NM_USUARIOCRIACAO,TRA_DT_ALTERACAO,TRA_NM_USUARIOALTERACAO,TRA_CD_CONTA,TRA_CODCTR,TRA_TRANSACAO_ONLINE,TRA_TIV_HEXA,TRA_TIV_BINARIO,TRA_CD_DISPOSITIVO,TRA_DATSINC,TRA_ID_TPSEGREG,TRA_FORNECEDOR,TRA_STATUS) 
VALUES (&NUMEROIDENTIFICADOR,&CODIGOBARRAIDENTIFICADOR,&CODIGOPONTOVENDALARM,259,SYSDATE,&CODIGOCAIXA,0,SYSDATE,&USUARIOLOGUEADO,SYSDATE,&USUARIOLOGUEADO,422,1,0,&TIVHEXA,&TIVBINARIO,423,SYSDATE,2,&FORNECEDOR,1);

找不到此脚本 我需要修复它,因为我需要更改字段的值 TRA_ID_TPSEGREG 取决于以下值:

SELECT TB0083_DS_TIPODISPOSITIVO FROM TB0083_TIPODISPOSITIVO WHERE TB0083_ID_TIPODISPOSITIVO = (SELECT FOR_DISPOSITIVO FROM TFORPD01 WHERE FOR_CODIGO = &FORNECEDOR)

如果值为'TIV',则在该位置插入3,否则在该字段中插入2。
谢谢!

1 个答案:

答案 0 :(得分:0)

有PL / SQL INSERT WHEN命令:

试试这个:

INSERT FIRST 
     WHEN TB0083_DS_TIPODISPOSITIVO = 'TIV' THEN
          INTO TTRAPD01
               (
                    <COLUMN_NAME1>,<COLUMN_NAME2>......
               )
               VALUES
               (
                    <COLUMN_VALUE1>,<COLUMN_VALUE2>.....
               )
     ELSE
          INTO TTRAPD01
               (
                    <COLUMN_NAME1>,<COLUMN_NAME2>......
               )
               VALUES
               (
                    <COLUMN_VALUE1>,<COLUMN_VALUE2>.....
               )
SELECT TB0083_DS_TIPODISPOSITIVO
          FROM TB0083_TIPODISPOSITIVO
          WHERE TB0083_ID_TIPODISPOSITIVO =
               (SELECT FOR_DISPOSITIVO FROM TFORPD01 WHERE FOR_CODIGO = &FORNECEDOR
               );

例如:

CREATE TABLE TEST ( ID NUMBER);
INSERT FIRST
   WHEN dummy  = 'Y' THEN
      INTO TEST
         VALUES(222)
   ELSE 
      INTO TEST
         VALUES(555)   
select dummy from dual;

上面的查询将在第一个条件满足时插入1个ROW。查看更多:>>here<<