我需要为存储过程中的临时表创建DDL语句 (Firebird 2.5);Firebird 2.5 PSQL存储过程与CREATE GLOBAL TEMPORARY TABLE
我知道我需要使用EXECUTE STATEMENT和动态SQL;
尽管存储过程本身已经成功执行并提交,但每次运行存储过程时,我都会在IBExpert中得到某种动态SQL错误 。
我所需要的确切的语法和一步一步如何写一个火鸟存储过程中动态 SQL代码,即与20列创建一个全局临时 表(GTT)的方式,和从另一插入数据存储过程(具有20列的客户端存储过程)。
我从GTT(20列)检索这些数据的一部分(5列), 操纵它,并开发SSRS报告;我不应该修改 原始客户端存储过程,因为它属于我们的客户端。
CREATE OR ALTER PROCEDURE XYZ (Parameter1, Parameter2, Parameter3)
RETURNS
(
column1,
column2
column3,
column4,
column5
)
-- I need 5 columns in my stored procedure XYZ --
AS
BEGIN
EXECUTE STATEMENT
'CREATE GLOBAL TEMPORARY TABLE MyOwnTable
(
column1,
column2
column3,
column4,
column5,
column6,
column7,
column8,
.
.
column20
)
ON COMMIT PRESERVE ROWS;
COMMIT;' ;
EXECUTE STATEMENT
'INSERT INTO MyOwnTable
SELECT *
FROM Client_Stored_Procedure (:Parameter1, :Parameter2, :Parameter3); ';
-- Client_Stored_Procedure : given by client -- has the same 3 parameters --
EXECUTE STATEMENT
'SELECT column1,column2,column3,column4, SUM(column5) AS "CalculatedColumn"
FROM MyOwnTable
GROUP BY column1,column2,column3,column4
WITH AUTONOMOUS TRANSACTION
INTO :column1,:column2,:column3,:column4,:CalculatedColumn ; ' ;
SUSPEND;
END
我能犯这个存储过程XYZ;但是当我运行我得到令牌未知提交....
我已经修改了此过程的许多不同部分;仍然得到某种令牌未知错误;
我在编写Firebird中的存储过程时非常基本;有人可以帮助我,给我正确的解决方案吗?