我正在处理一个请求,其中我必须创建一个表来插入一些数据。因此,显然我将首先拥有一个删除表st。在创建圣之前但是,当我第一次运行此程序(可以创建表之前)时,它将弹出一个错误,提示未创建表,然后从此处创建表和goe子。因此,每当有人第一次运行我的代码时,它将在放置表st上弹出此错误。有谁有更好的主意吗?
诸如“如果表存在则删除其他创建表”之类的东西,我不确定我们如何在sql中做到这一点
删除表table_name; -------------->在这里它第一次抛出错误,说表不存在。
创建表table_name
{ 很快 };
顺便说一下,我在Teradata上工作,但是简单的sql逻辑会有所帮助。
您可以创建SYSDBA或有足够的其他管理员级别的用户拥有一个存储过程DROP TABLE和CREATE TABLE特权执行以下操作:
DROP TABLE
CREATE TABLE
CREATE TABLE <TargetDB>.<TargetTable> AS <SourceDB>.<SourceTable> WITH DATA AND STATS;
您可以通过接受有关是否应将数据和/或统计信息复制到新表的附加参数来使其更加动态。
如果您使用的是BTEQ,则可以执行类似的操作(BTEQ命令语法可能略有偏离,但足够接近以便理解要点):
SELECT 1 FROM DBC.TABLES WHERE DatabaseName = '<TargetDB>' AND TableName = '<TargetTable>' AND TableKind = 'T' /* Make sure it is in fact a table, not a view, macro etc */ .IF ACIVITYCOUNT = 0 THEN GOTO CreateNewTable; DROP TABLE <TargetDB>.<TargetTable>; .IF ERRORCODE = 3807 THEN GOTO CreateNewTable; /* Table dropped by another process? */ .IF ERRORCODE > 0 THEN .QUIT ERRORCODE; /* Unexpected error */ .LABEL CreateNewTable; CREATE <TargetDB>.<TargetTable> AS <SourceDB>.<SourceTable> WITH DATA AND STATISTICS;