【问题标题】:How to move one table data to another table using stored procedure [closed]如何使用存储过程将一个表数据移动到另一个表[关闭]
【发布时间】:2021-09-16 17:11:49
【问题描述】:

有一个表说部门,其中存在数据。

create table department(deptno number, deptname varchar2(50), deptloc varchar2(50));

insert into department values(1,'A','X');
insert into department values(2,'B','Y');
insert into department values(3,'C','Z');

select * from department;

我想使用存储过程将此数据移动到另一个表中,例如 Department_SP。基本上,我想知道我们将如何使用将使用存储过程执行的某些条件或过滤器将数据从一个表移动到另一个表。只是我想知道这将如何完成。如果你们有任何这样的例子,我将不胜感激,然后请分享您对此的看法。

【问题讨论】:

    标签: sql oracle sql-insert


    【解决方案1】:

    创建客户表

    CREATE TABLE customers
    (customer_id number(10) NOT NULL, customer_name varchar2(50),city varchar2(50));
    

    向表中的客户插入数据

    insert into customers (customer_id, customer_name, city) values (1,'Adam','Washington');
    insert into customers (customer_id, customer_name, city) values (2,'Ben','NY');
    insert into customers (customer_id, customer_name, city) values (3,'Carl','Baltimore');
    

    为城市创建表

    CREATE TABLE cities
    (city_id number(10) NOT NULL, city_name varchar2(50));
    

    将数据插入城市表

    insert into cities (city_id, city_name) values (1, 'Washington');
    insert into cities (city_id, city_name) values (2, 'Los Angeles');
    insert into cities (city_id, city_name) values (3, 'Chicago');
    

    创建客户副本表(空)

    CREATE TABLE customers_cp AS SELECT * FROM customers where 1=0;
    

    如果此人的城市在城市表列表中,则将数据插入客户副本

    INSERT INTO CUSTOMERS_CP SELECT * FROM customers where city in (select city_name from cities);
    

    现在 CUSTOMERS_CP 表只包含 1 行,即华盛顿的亚当。

    【讨论】:

      【解决方案2】:

      像这样?

      ... all your code...
      -- create table department_cp with same structure as department but empty.
      CREATE TABLE department_cp AS SELECT * FROM department WHERE 1 = 2;
      
      SELECT * FROM department_cp;
      
      -- nothing
      
      CREATE OR REPLACE procedure copy_data
      AS
      BEGIN
        INSERT INTO department_cp SELECT * FROM department;
      END;
      /
      
      exec copy_data;
      
      SELECT * FROM department_cp;
      
      -- same as department.
      

      那么你的实际问题是什么?

      【讨论】:

      • 谢谢。如果你有一些复杂的例子,你能分享一些我们正在应用一些逻辑或过滤器然后将它们插入另一个表吗?您的示例清楚地说明了我的期望,但请与我分享我评论中提到的一些复杂示例。
      • 定义“复杂”。你的要求很模糊。
      • 只需在FROM department 之后添加一个where 子句,您可以根据需要将其复杂化。我建议你玩它。
      • @KoenLostrie - 实际上你并不需要存储过程 - 除非有其他未说明的要求。如图所示,实际的解决方案只是一个简单的 SQL 语句。当然,如果这是一个重复的过程,按照某种时间表运行,那么可能需要一个 SP。但是另一方面,为什么要将数据从一个表复制到另一个表。没有更多信息,这有点像XY Problem
      • @EdStevens 感谢 Ed,我意识到这一点,但 OP 专门要求这样做。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 2010-12-22
      • 2012-04-07
      • 1970-01-01
      相关资源
      最近更新 更多