创建表,然后将数据从另一个表插入到新表中

Posted

技术标签:

【中文标题】创建表,然后将数据从另一个表插入到新表中【英文标题】:Create table and then insert data into the new table from another table 【发布时间】:2015-07-09 07:42:18 【问题描述】:

我正在创建一个名为 emp_inforamtion 的表,并检查该表是否存在于数据库中,如果不存在则创建表,然后将银行表中的数据插入到 emp_information 表中。

DECLARE
  ncount NUMBER;
  v_sql  VARCHAR2(4000);
  CURSOR c1
  IS
    SELECT bank_code,
      center_code,
      bank_name,
      logo
    FROM bank
    WHERE bank_code ='607143';
BEGIN
  SELECT COUNT(1) INTO ncount FROM tab WHERE tname LIKE '%EMP_INFORMATION%';
  IF (ncount <= 0) THEN
    DBMS_OUTPUT.PUT_LINE (ncount || 'count');
    BEGIN
      v_sql :=' CREATE TABLE EMP_INFORMATION  
(    
emp_id         VARCHAR2(3),    
emp_name       VARCHAR2(20),    
emp_salary     VARCHAR2(3),    
emp_department VARCHAR2(3)  
)';
      EXECUTE immediate v_sql;
      COMMIT;
      BEGIN
        FOR i IN c1
        LOOP
          INSERT
          INTO EMP_INFORMATION
            (
              emp_id,
              emp_name,
              emp_salary,
              emp_department
            )
            VALUES
            (
              i.bank_code,
              i.bank_name,
              i.center_code,
              i.logo
            );
        END LOOP;
      END;
    END;
  END IF;
  end;
/

执行上述游标后发现以下错误:

ORA-06550:第 30 行,第 16 列:PL/SQL:ORA-00942:表或视图不存在 ORA-06550:第 29 行,第 11 列:PL/SQL:忽略 SQL 语句

【问题讨论】:

你在哪里检查存在?查看您尝试访问的第 30 行第 16 列;我们这里没有任何行号。 我只是给了你一些提示。 感谢您的回复。 第 30 行 INTO EMP_INFORMATION...语句,第 16 列以 EMP_INFORMATION 开头 我认为表没有创建,当它试图将数据插入该表时,它会给出错误,说表或视图不存在......是吗? 【参考方案1】:

当您在匿名块中使用 execute immediate 创建表时,使用 execute immediate 将数据插入其中。

DECLARE
  ncount NUMBER;
  v_sql  VARCHAR2(4000);
  CURSOR c1
  IS
    SELECT bank_code,
      center_code,
      bank_name,
      logo
    FROM bank
    WHERE bank_code ='607143';
BEGIN
  SELECT COUNT(1) INTO ncount FROM tab WHERE tname LIKE '%EMP_INFORMATION%';
  IF (ncount <= 0) THEN
    DBMS_OUTPUT.PUT_LINE (ncount || 'count');
    BEGIN
      v_sql :=' CREATE TABLE EMP_INFORMATION  
                (    
                  emp_id         VARCHAR2(3),    
                  emp_name       VARCHAR2(20),    
                  emp_salary     VARCHAR2(3),    
                  emp_department VARCHAR2(3)  
                )';
      EXECUTE IMMEDIATE v_sql;
      BEGIN
        FOR i IN c1
        LOOP
          EXECUTE IMMEDIATE 'INSERT
          INTO EMP_INFORMATION
            (
              emp_id,
              emp_name,
              emp_salary,
              emp_department
            )
            VALUES
            (
              :a,
              :b,
              :c,
              :d
            )' using i.bank_code, i.bank_name, i.center_code, i.logo;
        END LOOP;
      END;
    END;
  END IF;
  end;
/

【讨论】:

以上是关于创建表,然后将数据从另一个表插入到新表中的主要内容,如果未能解决你的问题,请参考以下文章

在 symfony2 中创建表

SQL循环表将记录插入新表,然后获取新ID并插入其他表

在创建新表时插入另一个表中的值

插入创建新表

sql语句将查询结果作为新表插入

如何连接两个表中的数据并将结果插入到新表中?