首页 > 解决方案 > 文件被解释为变量

问题描述

用 SQL 编写并测试了一个非常简单的脚本。现在我需要让它在 Postgres 中工作(我只是在学习)。无法弄清楚最新的错误。该脚本正在读取文件作为变量。也许我没有正确使用 DBeaver(我也在努力学习)。基本上,当数据超过 90 天时,将日期从 transactions 移动到 archive_transactions 并删除 change_log 记录。错误和代码如下:

SQL Error [42601]: ERROR: "archived_transactions_prerun" is not a known variable
  Position: 325

代码:

CREATE OR REPLACE FUNCTION Archiving ()
RETURNS void AS $$

declare 

BEGIN

DROP TABLE IF EXISTS Archived_Transactions_PreRun;
DROP TABLE IF EXISTS Change_Log_PreRun;
DROP TABLE IF EXISTS Transactions_PreRun;
--COMMIT;

SELECT *
INTO Archived_Transactions_PreRun
FROM Archived_Transactions;

SELECT *
INTO Change_Log_PreRun
FROM Change_Log;

SELECT *
INTO Transactions_PreRun
FROM Transactions;

COMMIT;

-- Create reporting table entries
----------------------------------

DECLARE YYYY_MM_DD  DATE = (SELECT CONVERT (DATE, GETDATE()))     -- Run Date
  , Report_Date DATE = (SELECT DATEADD (DAY, -90, GETDATE())) -- 90 Days ago
  , To_Archive  FLOAT
  , Chg_Log     FLOAT;

-- Count records to be archived
-------------------------------

SET Chg_Log    = (SELECT COUNT(*) FROM Change_Log WHERE date_updated < Report_Date);
SET To_Archive = (SELECT COUNT(*) FROM transactions WHERE date < Report_Date);

-- If nothing to archive, exit 
------------------------------

IF Chg_Log    > 0
OR To_Archive > 0;
BEGIN

-- Remove 90+ records from change_log
-------------------------------------

DELETE
  FROM change_log
 WHERE date_updated < Report_Date;

-- Copy 90+ records to Archived_Transactions
--------------------------------------------

INSERT INTO Archived_Transactions
SELECT *
  FROM Transactions
 WHERE [date] < Report_Date;

-- Remove 90+ records from transactions
---------------------------------------

DELETE
  FROM Transactions
 WHERE date < Report_Date;
COMMIT;
END;

END;
$$
LANGUAGE 'plpgsql' VOLATILE
COST 100

标签: postgresqldebugging

解决方案


推荐阅读