【问题标题】:How many rows inserted into table by create table statementcreate table 语句在表中插入了多少行
【发布时间】:2017-07-18 08:35:30
【问题描述】:

有没有办法统计有多少行插入到表中

Create table tbl1 as select * from tbl2;

从 PL\SQL 函数执行的语句(立即执行)?

当我使用 SQL%ROWCOUNT 时,结果为 1。

谢谢。

【问题讨论】:

  • 我在 Oracle 而不是 Sql server 中寻找解决方案
  • SQL%ROWCOUNT 将给出受 DML 语句影响的行数,当您执行 Execute immediate <yoursql> 时,只发生了 1 个操作,并且创建了该表,因此您得到的行数为 1。在下一步就可以算了。在一个变量中并检查它,
  • 是的,我想这就是我得到 1 的原因。你的意思是“在下一步中你可以计算它。在一个变量中并检查它”?从 tbl1 中选择 count(*)?
  • @user2671057 你可以看到我的回答我的意思。

标签: oracle plsql create-table


【解决方案1】:

你可以试试这个。正如我的评论中提到的,您需要按照以下方式进行操作。请记住,您需要再次使用Execute immediate,否则您会遇到 tab1 未定义的问题。

DECLARE
   vsql   VARCHAR2 (200);

   cnt    NUMBER;
BEGIN
   vsql := 'create table tbl1 as select * from employee';

   EXECUTE IMMEDIATE vsql;

   vsql := 'select count(1) from tbl1';

   EXECUTE IMMEDIATE vsql INTO cnt;

   DBMS_OUTPUT.put_line (cnt);
END;

【讨论】:

    【解决方案2】:

    你可以做一件事。您可以先从tbl2 创建一个空表tbl1。然后使用SELECT 插入数据,然后使用-SQL%ROWCOUNT

    CREATE TABLE tbl1 AS SELECT * FROM tbl2 WHERE 1=2;
    INSERT INTO tbl1 SELECT * FROM tbl2;
    DBMS_OUTPUT.PUT_LINE ('No. of rows inserted in TBL2 from TBL1 = ' || SQL%ROWCOUNT);
    

    【讨论】: