使用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 ...
答案 0 :(得分:2)
您可以使用递归cte生成数字,然后在其中一列中使用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
答案 1 :(得分:2)
如果您需要在表格中插入许多行,其中只有一些字段不同,您可以使用以下内容:
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>
答案 2 :(得分:2)
试试这个:
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.