如何运行多个 SQL 查询?

Posted

技术标签:

【中文标题】如何运行多个 SQL 查询?【英文标题】:How to run multiple SQL queries? 【发布时间】: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) 另见:download.oracle.com/docs/cd/B10501_01/server.920/a90842/ch6.htm 有时您根本不需要(临时)临时表,例如可以改用 CTE。但是运行所有三个(创建 A、更新 A、删除 A)的最终结果难道不是什么都没有吗? 在单个工作单元中创建和删除表是一种代码味道。这在其他一些数据库中可能是必需的,但在 Oracle 中不是必需的:总是有更好的方法,具体取决于您需要做什么。 【参考方案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 语句 感谢您指出这一点。我今天学了些新东西! :)

以上是关于如何运行多个 SQL 查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Tedious 中运行 sql 查询,为 sql in 运算符提供多个值?

如何使用 Zend_Db_Adapter 在每次调用“查询”时运行多个 SQL 查询?

EF 运行多个查询 - 如何更改为使用一个查询?

PHP 如何从 AJAX 调用中发布多个数组/json 值并在同一个 SQL 查询中运行它们?

如何从SQL表中选择特定行并在SQL Server中连接多个表?

如何在sql中打印多个数据