SQL多次使用值(sysguid)循环插入

时间:2018-08-04 17:47:38

标签: sql plsql sql-insert

我目前有以下脚本,用于将一些虚拟数据插入到我的一张表中以进行测试。
我可以调用它并传递我想要的条目数。很好。
现在的问题是某些数据无法使用。
CRecordID在所有三行(12、17、19)中都应具有相同的值。

有没有办法存档?

WHENEVER SQLERROR EXIT
PROMPT inserting

INSERT INTO MySchema.MyTable (MYRECORD, TMSTAMP, SHORTRECORD, CRecordID) (
SELECT 
      '<MYRECORD>
              <TimeStamp>'||TO_CHAR(SYSDATE,'DD.MM.YY')||' '||to_char(to_date('2000-01-01', 'yyyy-mm-dd')+dbms_random.value(1,1000), 'HH24:MI:SS')||'</TimeStamp>
              <User>Test_User_1</User>
              <Application>Application1</Application>
              <Action>Dummy action text</Action>
              <INFO>dummy info text</INFO>
              <CRecordID>'||'CID_'||sys_guid()||'</CRecordID>  -- line 12
      </MYRECORD>', 
      to_date(SYSDATE,'DD.MM.YY'),
      '<SHORTRECORD>
            <User>Test_User_1</User>
            <CRecordID>'||'CID_'||sys_guid()||'</CRecordID>    -- line 17
      </SHORTRECORD>',
      'CID_'||sys_guid()                                       -- line 19
FROM DUAL connect by level <= &1
);

COMMIT;

PROMPT inserting done

注意:数据库是一个Oracle DB。

1 个答案:

答案 0 :(得分:3)

分别选择SYS_GUID()(例如,以我的示例为例,使用CTE)并将其值与您的列连接(我使用L12和L17来表示您提到的第12和17行)。

SQL> with gujda as
  2    (select sys_guid() guj
  3     from dual
  4     connect by level <= 4
  5    )
  6  select 'L12_' || g.guj l12,
  7         'L17_' || g.guj l17
  8  from gujda g;

L12                                  L17
------------------------------------ ------------------------------------
L12_EFB5A4947D2E4B7BBE6017E57C673ABF L17_EFB5A4947D2E4B7BBE6017E57C673ABF
L12_3E2D5B50D7C44C7FA6073A9F739687CF L17_3E2D5B50D7C44C7FA6073A9F739687CF
L12_724C21F7914B423B8CBDDC6A44AD2016 L17_724C21F7914B423B8CBDDC6A44AD2016
L12_F15D6C9865424E5C8FFFEA9C09DD6D37 L17_F15D6C9865424E5C8FFFEA9C09DD6D37

SQL>