如何运行多个 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 查询?
PHP 如何从 AJAX 调用中发布多个数组/json 值并在同一个 SQL 查询中运行它们?