在 sqlplus 中执行立即截断表

Posted

技术标签:

【中文标题】在 sqlplus 中执行立即截断表【英文标题】:execute immediate truncate table in sqlplus 【发布时间】:2012-11-05 11:14:20 【问题描述】:

为什么 sqlplus 脚本中的execute immediate 'truncate table trade_economics'; 会出现以下错误?

 BEGIN immediate 'truncate table trade_economics'; END;
                    *
    ERROR at line 1:
    ORA-06550: line 1, column 17:
    PLS-00103: Encountered the symbol "truncate table trade_economics" when
    expecting one of the following:
    := . ( @ % ;
    The symbol ":=" was substituted for "truncate table trade_economics" to
    continue.`

【问题讨论】:

我认为您有充分的理由使用动态 SQL。 【参考方案1】:

您需要在immediate 之前添加execute 才能使其工作。

类似:

begin
    execute immediate 'truncate table foo';
end;
/

【讨论】:

【参考方案2】:

TRUNCATE 是 DDL(数据定义语言)。您不能从 PL/SQL 中执行 DDL。也就是说,你不能直接,但你可以通过动态 SQL。

所以

使用这个: 删除

【讨论】:

【参考方案3】:

这个执行可以包含在一个过程中

EXECUTE IMMEDIATE ('truncate table name');
--next--
INSERT
    / * + append * /
    INTO table ..

【讨论】:

以上是关于在 sqlplus 中执行立即截断表的主要内容,如果未能解决你的问题,请参考以下文章

如果表不存在,我需要使用 sqlplus [重复] 运行脚本

如何在sqlplus中查看库中都有哪些表

sqlplus多行代码怎么

如何增加 sqlplus 列输出长度?

sqlplus常见命令

SQLPLUS使用及Oracle表空间设定自动扩展