可用版本:Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12

EXECUTE 语句

适用于 ❌ 开源版   ✅ Express 版   ✅ 专业版   ✅ 企业版

许多方言支持从过程代码运行动态 SQL 的某种方式。为此,可以使用 EXECUTEEXECUTE IMMEDIATE 语句。

在某些方言(例如 Oracle PL/SQL)中,使用 EXECUTE 是从过程代码运行 DDL 的唯一方法。

例如

-- PL/SQL
BEGIN
  EXECUTE IMMEDIATE 'CREATE TABLE t (col int)';
END;
// All dialects
create.begin(
  execute(createTable("t").column("col", INTEGER).getSQL())
).excute();

您显然可以直接将任意字符串传递给 EXECUTE 语句,就像在 PL/SQL 中一样,但上面的示例展示了如何通过调用 Query.getSQL(),将这种方法与动态创建的 jOOQ 语句一起使用。

方言支持

此示例使用 jOOQ

execute("create table t (i int)")

翻译成以下特定方言的表达式

Aurora Postgres、CockroachDB、Postgres、YugabyteDB

EXECUTE 'create table t (i int)'

BigQuery、DB2、Hana、MariaDB、Oracle、Snowflake

EXECUTE IMMEDIATE 'create table t (i int)'

Firebird

EXECUTE STATEMENT 'create table t (i int)'

MySQL

CREATE PROCEDURE block_1752830487550_8599219()
MODIFIES SQL DATA
BEGIN
  PREPARE s FROM 'create table t (i int)';
  EXECUTE s;
  DEALLOCATE PREPARE s;
END;
CALL block_1752830487550_8599219();
DROP PROCEDURE block_1752830487550_8599219;

SQLServer

EXECUTE ('create table t (i int)')

ASE、Access、Aurora MySQL、ClickHouse、Databricks、Derby、DuckDB、Exasol、H2、HSQLDB、Informix、MemSQL、Redshift、SQLDataWarehouse、SQLite、Sybase、Teradata、Trino、Vertica

/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

引用此页

反馈

您对此页面有任何反馈吗? 我们很乐意听到您的意见!

The jOOQ Logo