在过程中创建表

Posted

技术标签:

【中文标题】在过程中创建表【英文标题】:CREATE TABLE INSIDE PROCEDURE 【发布时间】:2019-08-13 03:09:12 【问题描述】:

我似乎无法在此过程中创建表。我在网上读到,对于任何 DDL,我都需要使用 EXECUTE IMMEDIATE 并尝试了以下几个在线示例。但是,即使尝试了几种解决方案,它仍然失败。 '

错误 ""ORA-00904: "End": 标识符无效 ORA-06512: at “EXTRACT_AUTOMATED_CHECKS”,第 89 行“

CREATE OR REPLACE PROCEDURE EXTRACT_AUTOMATED_CHECKS AS 


BEGIN

--DROP TABLE
   BEGIN 
   EXECUTE IMMEDIATE ('DROP TABLE extract_checks') ;    
   EXCEPTION 
   WHEN OTHERS THEN NULL;
   END;

--CREATE TABLE, INDEX
--TABLE
   BEGIN
   EXECUTE IMMEDIATE 'CREATE TABLE extract_checks
                    (
                     Card number(19) NOT NULL PRIMARY KEY
                     ,Customer_Id number(19)
                    )';
    COMMIT;
    END;

--INDEX
    BEGIN
    EXECUTE IMMEDIATE('CREATE INDEX IDX_EXT_CHECKS extract_checks(Customer_Id)');
    COMMIT;
    END;

SOURCE.DBA_SEND_MAIL(
V_FROM=>'Notification@Company.com;',
V_RECIPIENT  => 'employee@company.com',
V_SUBJECT => 'Automated Checks Completed',
V_MESSAGE  =>  'Automated Checks Completed' );

EXCEPTION WHEN OTHERS THEN

SOURCE.DBA_SEND_MAIL(
V_FROM=>'Notification@Company.com;',
V_RECIPIENT  => 'employee@company.com',
V_SUBJECT => 'Automated  Checks Failed',
V_MESSAGE  =>  'Automated  Checks Failed' );

RAISE;

END EXTRACT_AUTOMATED_CHECKS;

【问题讨论】:

我建议你不要这样做。在Oracle中,我们通常不会动态删除+创建表。创建一次,想用多少次就用多少次。 你的设计看起来很糟糕。我假设您正在寻找一个 GLOBAL TEMPORARY TABLE。创建一次并重复使用它。还有 15 个几乎相同的列看起来很糟糕。创建另一个表“REWARDS”,并引用表 PX_extract_checks 和列 VISIT、TRIGGER、WALLET 并将您的数据放入其中。如果您需要在列而不是行中显示数据,请使用PIVOT 子句。 "End" 用双引号括起来。也许您打算使用两个单引号 (''End'')? @WilliamRobertson 嘿,谢谢。现在可以了。我不知道我们不能使用“。非常感谢您的帮助。:) 缩进与编译器完全无关。但是请善待开发人员、您自己或其他人,并制定一致的缩进方案并始终使用它——即使它认为没有必要。此外,您的过程仅包含 DDL,因此不需要提交; Oracle 在执行每个 DDL 之前和之后都会自动提交。但是,您最好听听 Littlefoot 和 Wernfried Domscheit 的 cmets。 【参考方案1】:

CREATE TABLE 没有问题。

您在最后一次通话结束时错过了;,以便在异常块中发送邮件。

SOURCE.DBA_SEND_MAIL(
V_FROM=>'Notification@Company.com;',
V_RECIPIENT  => 'employee@company.com',
V_SUBJECT => 'Automated PX Checks Failed',
V_MESSAGE  =>  'Automated PX Checks Failed' ); <<-- this ; is missing

干杯!!

【讨论】:

您好,感谢您观看,我很抱歉没有看到它。但在我的实际程序中,我确实有 ; 编辑问题并粘贴不起作用的实际代码。

以上是关于在过程中创建表的主要内容,如果未能解决你的问题,请参考以下文章

如何在oracle10G中创建表空间

Oracle 模式用户无法在过程中创建表

mysql怎么建库建表

将 POCO/实体添加到 DbContext 以进行自定义查询/过程,而无需先在实体框架代码中创建表

如何在 postgres 中创建表并插入具有动态值的数据

在 Greenplum 中创建表结构