繁体   English   中英

INSERT内部的CAST和CONCAT

[英]CAST and CONCAT inside INSERT

使用Oracle数据库:

如何使用串联并在INSERT语句中进行强制转换?

我需要为某些测试插入数据,并且需要更改插入数据的ID。

到目前为止,我得到了:

BEGIN
  FOR i IN 100..400 LOOP
      INSERT INTO PRESTATION 
      (ID_DEMANDE, ID_PRESTATION, CODE_PRODUCTEUR_UNICITE_PRESTA, SELECTION, ID_RUBRIQUE, LIBELLE_CONTRAT, CODE_PRODUCTEUR_ENTITE_JURIDIQ, GUICHET_GESTIONNAIRE, CODE_SOURCE, CODE_PRODUIT, CODE_SOUS_PRODUIT, LIBELLE_PRODUIT, CODE_BANQUE, NUMERO_CLIENT, MONTANT, DEVISE, RESEAU_DISTRIBUTION, DATE_OUVERTURE, DATE_FERMETURE, ROLE) 
      VALUES 
      ('DO20161220160056000592', CONCAT('0000000317501820134', CAST(i AS VARCHAR)), '00020', 'O', 0, 'COMPTE  COURANT', '30003', '03175', '001', '020', '001', 'COMPTE D ENTREPRISE', '30003', '00000013419', '4242,420', 'EUR', '10', '27/01/93', '31/12/99', '10');
  END LOOP;
END;

我可能需要在某处添加一个SELECT。

或者可能有更好的方法来生成这些ID ...

您可以使用递归cte生成数字,然后concatenate它们concatenate在其中一列中。

INSERT INTO PRESTATION 
  (ID_DEMANDE, ID_PRESTATION, CODE_PRODUCTEUR_UNICITE_PRESTA, SELECTION, ID_RUBRIQUE, LIBELLE_CONTRAT, CODE_PRODUCTEUR_ENTITE_JURIDIQ, GUICHET_GESTIONNAIRE, CODE_SOURCE, CODE_PRODUIT, CODE_SOUS_PRODUIT, LIBELLE_PRODUIT, CODE_BANQUE, NUMERO_CLIENT, MONTANT, DEVISE, RESEAU_DISTRIBUTION, DATE_OUVERTURE, DATE_FERMETURE, ROLE) 
with nums(num) as (select 100 from dual
                   union all
                   select num+1 from nums where num < 400)
SELECT 'DO20161220160056000592', CONCAT('0000000317501820134', CAST(num AS VARCHAR(3))), '00020', 'O', 0, 'COMPTE  COURANT', '30003', '03175', '001', '020', '001', 'COMPTE D ENTREPRISE', '30003', '00000013419', '4242,420', 'EUR', '10', '27/01/93', '31/12/99', '10'
FROM nums

如果您需要在一个表中插入许多行,而表中只有一些字段是变化的,则可以使用以下方法:

SQL> create table yourTable ( col1 varchar2(20), col2 varchar2(20), col3 varchar2(20));

Table created.

SQL> insert into yourTable ( col1, col2, col3)
  2    select 'fixedValue', 'fixedValue2', 100 + level
  3    from dual
  4    connect by level <= 10;

10 rows created.

SQL> select * from yourTable;

COL1                 COL2                 COL3
-------------------- -------------------- --------------------
fixedValue           fixedValue2          101
fixedValue           fixedValue2          102
fixedValue           fixedValue2          103
fixedValue           fixedValue2          104
fixedValue           fixedValue2          105
fixedValue           fixedValue2          106
fixedValue           fixedValue2          107
fixedValue           fixedValue2          108
fixedValue           fixedValue2          109
fixedValue           fixedValue2          110

10 rows selected.

SQL>

尝试这个:

BEGIN
  FOR i IN 1..400 LOOP
      INSERT INTO PRESTATION 
      (ID_DEMANDE, ID_PRESTATION, CODE_PRODUCTEUR_UNICITE_PRESTA, SELECTION, ID_RUBRIQUE, LIBELLE_CONTRAT, CODE_PRODUCTEUR_ENTITE_JURIDIQ, GUICHET_GESTIONNAIRE, CODE_SOURCE, CODE_PRODUIT, CODE_SOUS_PRODUIT, LIBELLE_PRODUIT, CODE_BANQUE, NUMERO_CLIENT, MONTANT, DEVISE, RESEAU_DISTRIBUTION, DATE_OUVERTURE, DATE_FERMETURE, ROLE) 
      VALUES 
      ('DO20161220160056000592', '0000000317501820134'||''||i||'', '00020', 'O', 0, 'COMPTE  COURANT', '30003', '03175', '001', '020', '001', 'COMPTE D ENTREPRISE', '30003', '00000013419', '4242,420', 'EUR', '10', '27/01/93', '31/12/99', '10');
  END LOOP;
END;

演示:

SQL> BEGIN
  FOR i IN 1..4 LOOP
      dbms_output.put_line ('0000000317501820134'||''||i||'');
  END LOOP;
 END;    
 /
00000003175018201341
00000003175018201342
00000003175018201343
00000003175018201344

PL/SQL procedure successfully completed.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM