[英]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.