Oracle:用一條 INSERT 語句批量插入多條記錄____Oracle

來源:互聯網
上載者:User

用一條 INSERT 語句批量插入多條記錄,執行個體如下:

先建立這樣一個表 T:

SQL> DESC T
 Name                       Null?    Type
 ----------------------------------------- -------- ----------------------------
 NUM                            NUMBER
 BIN                            RAW(30)

程式碼:

typedef struct RAWTYPE {
  unsigned short  len;
  unsigned char buf[30];   // buf的尺寸必須與表T的BIN欄位的尺寸一致。
} RAWTYPE;

EXEC SQL TYPE RAWTYPE IS VARRAW(30);   // 同樣,VARRAW的尺寸也必須與表T的BIN欄位的尺寸一致。


void fun(...) // 函數
{
    ...
    int       wnum[3];
    int       rnum[3];
    RAWTYPE   wbin[3];
    RAWTYPE   rbin[3];

    memcpy(wbin[0].buf, "123", 3);
    wbin[0].len = 3;
    wnum[0] = 1;

    memcpy(wbin[1].buf, "abcdef", 6);
    wbin[1].len = 6;
    wnum[1] = 2;

    memcpy(wbin[2].buf, "中華人民共和國", 14);
    wbin[2].len = 14;
    wnum[2] = 3;

    printf("\n--- write: ---\n");

    for(n=0; n<3; n++)
    {
        printf("wnum[%d] = %d\n", n, wnum[n]);
        printf("wbin[%d](len = %d): ", n, wbin[n].len);
        for(i=0; i<wbin[n].len; i++)
            printf("%02X ", wbin[n].buf[i]);
        printf("\n");
    }

    EXEC SQL insert into T (NUM, BIN) values (:wnum, :wbin);
    EXEC SQL COMMIT WORK;

    printf("\n--- read: ---\n");

    EXEC SQL select NUM, BIN INTO :rnum, :rbin from T;

    for(n=0; n<3; n++)
    {
        printf("rnum[%d] = %d\n", n, rnum[n]);
        printf("rbin[%d](len = %d): ", n, rbin[n].len);
        for(i=0; i<rbin[n].len; i++)
            printf("%02X ", rbin[n].buf[i]);
        printf("\n");
    }
    ...
}


運行結果:

--- write: ---
wnum[0] = 1
wbin[0](len = 3): 31 32 33
wnum[1] = 2
wbin[1](len = 6): 61 62 63 64 65 66
wnum[2] = 3
wbin[2](len = 14): E4 B8 AD E5 8D 8E E4 BA BA E6 B0 91 E5 85

--- read: ---
rnum[0] = 1
rbin[0](len = 3): 31 32 33
rnum[1] = 2
rbin[1](len = 6): 61 62 63 64 65 66
rnum[2] = 3
rbin[2](len = 14): E4 B8 AD E5 8D 8E E4 BA BA E6 B0 91 E5 85


再看看錶T裡的記錄:

SQL> SELECT * FROM T;

       NUM BIN
---------- ------------------------------------------------------------
     1 313233
     2 616263646566
     3 E4B8ADE58D8EE4BABAE6B091E585



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.