易失性表很好,有点类似于sql server(我的背景)中的临时表.有没有办法检查是否已存在易失性表?第一次运行时,此代码无效:
DROP TABLE SomeVolatileTable;
CREATE VOLATILE TABLE SomeVolatileTable AS
(
SELECT
TOP 10 *
FROM SomeSourceTable
) WITH DATA ON COMMIT PRESERVE ROWS;
Run Code Online (Sandbox Code Playgroud)
在SQL Server中,您可以检查是否存在临时表:
IF OBJECT_ID('tempdb..#SomeTempTable') IS NOT NULL DROP TABLE #SomeTempTable
Run Code Online (Sandbox Code Playgroud)
Teradata中存在类似的东西吗?
没有办法检查是否存在特定的易失性表,除此之外还HELP VOLATILE TABLE返回所有 VT.
但您可以创建一个如下所示的存储过程:
/*
Drop a table ignoring 3807 error (Table doesn't exist)
*/
REPLACE PROCEDURE drop_table_if_exists
(
IN db_name VARCHAR(128) CHARACTER SET Unicode,
IN tbl_name VARCHAR(128) CHARACTER SET Unicode,
OUT msg VARCHAR(400) CHARACTER SET Unicode
) SQL SECURITY INVOKER
BEGIN
DECLARE full_name VARCHAR(361) CHARACTER SET Unicode;
DECLARE sql_stmt VARCHAR(500) CHARACTER SET Unicode;
DECLARE exit HANDLER FOR SqlException
BEGIN
IF SqlCode = 3807 THEN SET msg = full_name || ' doesn''t exist.';
ELSE
RESIGNAL;
END IF;
END;
SET full_name = '"' || Coalesce(db_name,DATABASE) || '"."' || tbl_name || '"';
SET sql_stmt = 'DROP TABLE ' || full_name || ';';
EXECUTE IMMEDIATE sql_stmt;
SET msg = full_name || ' dropped.';
END;
Run Code Online (Sandbox Code Playgroud)
它只会忽略表不存在的错误,但仍然无效的权限等.
如果您使用自己的用户作为数据库调用它,它也适用于Volatile Tables:
CALL drop_table_if_exists(USER,'SomeVolatileTable', msg);
Run Code Online (Sandbox Code Playgroud)