当前位置: 首页 > 知识库问答 >
问题:

alter table期间Oracle存储过程编译错误

洪胤
2023-03-14

我写了一个存储过程:

CREATE OR REPLACE PROCEDURE test1
AS
  strSchema VARCHAR2(20);

BEGIN

EXECUTE IMMEDIATE
    'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEA_CONTRAINT ';
    'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEB_CONTRAINT ';
    'ALTER TABLE TABLE_C DISABLE CONSTRAINT TABLEC_CONTRAINT ';
COMMIT;

END test1;

但是我在编译过程中遇到以下错误,不知道为什么。

PLS-00103:在预期以下情况之一时遇到符号“ALTER TABLE”:

(begin case:声明结束异常,退出goto,如果循环mod null pragma,提升返回,选择update with with

符号“(”替换为“ALTER TABLE”以继续。

共有2个答案

林夕
2023-03-14

一个命令中的一个立即执行

CREATE OR REPLACE PROCEDURE test1
AS
  strSchema VARCHAR2(20);

BEGIN

EXECUTE IMMEDIATE
    'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEA_CONTRAINT ';
EXECUTE IMMEDIATE
    'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEB_CONTRAINT ';
EXECUTE IMMEDIATE
    'ALTER TABLE TABLE_C DISABLE CONSTRAINT TABLEC_CONTRAINT ';

END test1;
齐威
2023-03-14

这应该行得通。实际上不需要提交ALTER TABLE是一个不需要提交的DDL语句。

CREATE OR REPLACE PROCEDURE test1
AS
  strSchema VARCHAR2(20);

BEGIN

EXECUTE IMMEDIATE
    'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEA_CONTRAINT ';
EXECUTE IMMEDIATE
    'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEB_CONTRAINT ';
EXECUTE IMMEDIATE
    'ALTER TABLE TABLE_C DISABLE CONSTRAINT TABLEC_CONTRAINT ';
COMMIT;

END test1;
 类似资料:
  • 我可以在Oracle中通过ODBC执行一批存储过程吗?存储过程具有我使用参数标记绑定的输入参数。 在SQLServer中,我有这个功能,在DB2中,我只能进行批处理插入/更新,但我不能从ODBC/C代码批处理存储过程。 Oracle似乎支持插入语句的批处理,如果使用JDBC,也可以批处理存储过程。 是否可以做同样的事情,但使用对存储过程和ODBC的调用? 谢谢

  • 如何使用表(X)作为输入参数编写Oracle存储过程,并且在过程中使用表X与另一个表Y联接? 表X将有数千条记录。 不希望将表名传递为varchar,然后使用动态SQL(因此,此选项不在画面中)

  • 本文向大家介绍解决PL/SQL修改Oracle存储过程编译就卡死的问题,包括了解决PL/SQL修改Oracle存储过程编译就卡死的问题的使用技巧和注意事项,需要的朋友参考一下 问题描述: 这里我用的是Plsql dev客户端,然后修改存储过程编译就卡死,我一直以为是客户端的问题,其实并不然,是因为sessionid什么玩意的被占用了。只需要执行几行命令就可以了。原因的话就是可能有人在执行存储过程,

  • 本文向大家介绍asp.net中oracle 存储过程(图文),包括了asp.net中oracle 存储过程(图文)的使用技巧和注意事项,需要的朋友参考一下 在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合。 ORACLE代码 C#代码 调用方法 以上内容是通过代码介绍了asp.net中oracle存储过程。 接下来通过第二种的方式

  • 我一直试图使用Hibernate执行Oracle存储过程。这不是用于生产,而是用于我正在研究的Java源代码解析项目。简单地说,我不能从Oracle存储过程返回值。 我搜索并阅读了SO、Hibernate Community/Documentations(原生SQL章节)链接中的所有相关链接,并尝试了这些建议,但不知何故无法让它们发挥作用。以下是我的来源--我只包括相关的部分。