【问题标题】:How to run multiple SQL queries?如何运行多个 SQL 查询?
【发布时间】:2011-06-02 09:25:48
【问题描述】:

我有一个创建表查询、一个更新查询,然后是删除表查询。我需要一次性运行这三个查询。最好的方法是什么?

Example
1st Query: Create table A.
2nd Query: Update value in table A
3rd Query: Drop table A.

我不想一个一个地运行这三个查询,而是想通过 PLSQL 或其他方式在运行中运行它们。请帮忙。

【问题讨论】:

  • 将查询写入文件(脚本),然后运行脚本:techonthenet.com/oracle/questions/script.php
  • 我是在 TOAD IDE 中完成的。我们可以通过按 F5 一次运行多个查询我认为(Done long back)
  • 有时您根本不需要(临时)临时表,例如可以改用 CTE。但是运行所有三个(创建 A、更新 A、删除 A)的最终结果难道不是什么都没有吗?
  • 在单个工作单元中创建和删除表是一种代码味道。这在其他一些数据库中可能是必需的,但在 Oracle 中不是必需的:总是有更好的方法,具体取决于您需要做什么。

标签: sql plsql


【解决方案1】:

将三个查询放在一起,用分号隔开:

SELECT * 
FROM table_to_be_selected; 
DROP TABLE the table_to_be_dropped; 
TRUNCATE TABLE table_to_be_truncated;

您可以将这些查询连接成一个字符串并执行该字符串。

另一种方式是solution

【讨论】:

    【解决方案2】:

    只需在一个 .sql 文件中一个接一个地放置三个查询,每个语句后使用分号,然后将其作为脚本执行(在 SQL*Plus 提示符上使用@scriptname.sql 或在 TOAD/SQL Developer [或等效] 使用其脚本执行功能)。

    【讨论】:

      【解决方案3】:

      为什么不创建PROCEDURE

      例如

      CREATE OR REPLACE PROCEDURE foo
      IS
      BEGIN
        -- The create sentence goes here. For example:
        -- EXECUTE IMMEDIATE
        -- 'CREATE TABLE bar (...)';
      
        -- The update sentence goes here
        -- EXECUTE IMMEDIATE
        -- 'UPDATE bar SET ...';
      
        -- The drop/delete sentence goes here.
        -- EXECUTE IMMEDIATE
        -- 'DROP TABLE bar;'
      END;
      

      您可以使用以下方法对其进行测试:

      SET serveroutput ON;
      exec foo;
      

      PROCEDURE 存储在数据库中,因此您可以稍后使用它。

      希望这会有所帮助。

      【讨论】:

      • 不要忘记在此处立即执行 DDL 语句
      • 感谢您指出这一点。我今天学了些新东西! :)
      猜你喜欢
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多