需求: 将一个表中的数据插入另一个表, 然后根据条件对表中数据进行更新

Posted GoXXIV

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需求: 将一个表中的数据插入另一个表, 然后根据条件对表中数据进行更新相关的知识,希望对你有一定的参考价值。

insert into user_model
select * from user

UPDATE user_model m join user u
on m.id = u.id
set m.age= if(u.age>=26, 27, 25)

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

【中文标题】创建表,然后将数据从另一个表插入到新表中【英文标题】: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;
/

【讨论】:

以上是关于需求: 将一个表中的数据插入另一个表, 然后根据条件对表中数据进行更新的主要内容,如果未能解决你的问题,请参考以下文章

我想将表单中的数据插入到表中,然后从另一个表中选择另一个数据并使用 PHP 插入到第三个表中

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

插入数据库表中一条记录同时也插入另一个表中的SQL语句怎么写

如何将一个表中的值插入另一个表,然后更新原始表?

MySQL如何复制表中的一条记录并插入

根据另一个表中的数字在一个表中插入多行