专家...
我有一个存储过程,我试图将记录写入临时表。作为第一步,我想无条件地删除临时表(它可能不存在),然后根据我们拥有的 z-table 表重新创建表。本质上,我要的是一张空表,它是一个特定表的重复布局,以便稍后进行比较。
我尝试了一个简单的 DROP TABLE,但如果该表尚不存在,这将是一个很好的选择。我从这里找到了一种方法来创建另一个存储过程,该过程在 M_TABLES 中查找临时表,如果有记录则将其删除。我这样做了。都好。
问题是我删除表的 SP 将删除它,但是接下来的 CREATE TABLE 的反应好像它仍然存在 SAP DBTech JDBC:[288]:不能使用重复的表名。经过几次测试,我确认 drop-table 存储过程确实按预期工作。
我想也许我应该添加一个“提交”,但我收到一个编译错误,表明该功能不受支持。
接下来的两行是相关代码。
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 流程:
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。我宁愿不这样做。
谢谢你。