【问题标题】:SQL Inserting in loop using value (sysguid) multiple times多次使用值(sysguid)在循环中插入 SQL
【发布时间】:2018-08-04 17:47:37
【问题描述】:

我目前有以下脚本用于将一些虚拟数据插入我的一张表中以进行测试。
我可以调用它并传递我想要的条目数。效果很好。
现在的问题是某些数据不起作用。
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。

【问题讨论】:

  • 无关:我宁愿使用TRUNC(SYSDATE),而不是to_date(SYSDATE,'DD.MM.YY')
  • 对;将TO_DATE 函数应用于SYSDATE 是一种愚蠢,它无论如何都会返回DATE 数据类型。

标签: sql plsql sql-insert


【解决方案1】:

分别选择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>

【讨论】:

  • 请注意: WITH 不适用于括号 - 所以我必须从问题中的示例中删除它们。
  • 我不确定我是否理解 which 括号,但是 - 如果你这么说并且如果你做到了 - 很好,我很高兴你做到了!跨度>
猜你喜欢
  • 1970-01-01
  • 2019-02-06
  • 1970-01-01
  • 2021-09-21
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
相关资源
最近更新 更多