创建表失败,出现重复错误,因为它无法识别在前面的语句中删除了表

时间:2014-07-18 00:36:23

标签: sql hana

专家...

我有一个存储过程,我正在尝试将记录写入临时表。作为第一步,我想无条件地删除临时表(可能不存在),然后根据我们拥有的z表表重新创建表。基本上,我是在一个空表之后,这是一个特定表的重复布局,以便稍后进行比较。

我尝试了一个简单的DROP TABLE,但如果该表尚不存在,那么它就是一个showstopper。我从这里找到了一种方法来创建另一个存储过程,该过程在M_TABLES中查找临时表,如果有记录,则将其删除。我做到了一切都好。

问题是我删除表的SP会丢弃它,但接下来的CREATE TABLE会像使用SAP DBTech JDBC那样做出反应:[288]:不能使用重复的表名。经过多次测试,我确认了drop-table存储过程确实按预期工作。

我想也许我应该添加'commit'但是我得到一个编译错误,不支持该功能。

接下来的两行是相关代码。

CALL "SCHEMA1"."Z_PR_DROP_TABLE"('SCHEMA2', 'ZTB_CV_SCM_AGGR_FRESH');

CREATE TABLE "SCHEMA2"."ZTB_CV_SCM_AGGR_FRESH" AS 
       (select * from "SCHEMA1"."ZTB_CV_SCM_AGGR") WITH NO DATA;

drop store-procedure:

CREATE PROCEDURE "SCHEMA1".Z_PR_DROP_TABLE (schema_name VARCHAR2(50), table_name VARCHAR2(50))
LANGUAGE SQLSCRIPT
AS
BEGIN
    declare sch varchar2(50);
    declare tab varchar2(50);
    declare cnt int := 0;

    sch := trim(upper(:schema_name));
    tab := trim(upper(:table_name));

    select count(*) into cnt from "PUBLIC"."M_TABLES" where schema_name = :sch and table_name = :tab;

    if (:cnt > 0) then
        exec 'DROP TABLE '||:sch||'.'||:tab;
    end if;

End

我的工作是手动运行drop-table-stored-procedure。我宁愿不这样做。

谢谢。

1 个答案:

答案 0 :(得分:0)

我创建了存储过程Z_PR_DROP_TABLE,并且在SQL控制台中运行时两行有效

    CALL "SYSTEM"."Z_PR_DROP_TABLE"('SYSTEM', 'ZTB_CV_SCM_AGGR_FRESH');

    CREATE TABLE "SYSTEM"."ZTB_CV_SCM_AGGR_FRESH" AS 
          (select * from "PUBLIC"."DUMMY") WITH NO DATA;

结果是

    Statement 'CALL "SYSTEM"."Z_PR_DROP_TABLE"('SYSTEM', 'ZTB_CV_SCM_AGGR_FRESH')' 
    successfully executed in 190 ms 259 µs  (server processing time: 14 ms 16 µs) - Rows Affected: 0 


    Statement 'CREATE TABLE "SYSTEM"."ZTB_CV_SCM_AGGR_FRESH" AS (select * from "PUBLIC"."DUMMY") WITH NO DATA' 
    successfully executed in 91 ms 585 µs  (server processing time: 13 ms 291 µs) - Rows Affected: 0 
    Duration of 2 statements: 281 ms 

在SQL控制台中,如果“CREATE TABLE”SYSTEM“。”ZTB_CV_SCM_AGGR_FRESH“AS(select * from”PUBLIC“。”DUMMY“)没有数据;”被选中,虽然有2个语句,但只有选定的SQL语句被执行。

这是你的问题吗?