举例说明:
DECLARE
DM_groupID int =0;
UserCode VARCHAR(80)='admin';
SessionID VARCHAR(80)='';
BEGIN
SET DM_groupID=isnull((SELECT group_id FROM dbo.tSettingUser WHERE user_id=UserCode),0);
call test_p;
create GLOBAL TEMPORARY TABLE TMP_TEST1(c1 int) ON COMMIT PRESERVE ROWS
DELETE ROWS;
END;
--执行报错
执行失败(语句1)
-2004: 第8 行附近出现错误:
不支持的语句类型
有两种解决方法:
注意:达梦的存储过程中执行DDL语句需要用动态SQL
方法1:
先把临时表创建成功,然后再使用,不能在同一个存储过程中创建+使用
create or REPLACE PROCEDURE test_p
as
begin
execute IMMEDIATE 'create GLOBAL TEMPORARY TABLE TMP_TEST1(c1 int) ON COMMIT PRESERVE ROWS';
end;
DECLARE
DM_groupID int =0;
UserCode VARCHAR(80)='admin';
SessionID VARCHAR(80)='';
BEGIN
SET DM_groupID=isnull((SELECT group_id FROM dbo.TSETTIN WHERE user_id=UserCode),0);
call test_p;
--create GLOBAL TEMPORARY TABLE TMP_TEST1(c1 int) ON COMMIT
-- DELETE ROWS;
END;
方法二:
临时表,创建和使用都采用动态sql
DECLARE
DM_groupID int =0;
UserCode VARCHAR(80)='admin';
SessionID VARCHAR(80)='';
BEGIN
SET DM_groupID=isnull((SELECT group_id FROM dbo.TSETTIN WHERE user_id=UserCode),0);
execute IMMEDIATE 'create GLOBAL TEMPORARY TABLE TMP_TEST1(c1 int) ON COMMIT DELETE ROWS';
END;