2014-01-08 4 views

ответ

2

С видом каталога и execute immediate это довольно просто, чтобы написать это в nzplsql. Будьте осторожны, но call drop_like('%') очень быстро уничтожит базу данных.

create or replace procedure drop_like(varchar(128)) 
    returns boolean 
    language nzplsql 
as 
begin_proc 
declare 
    obj record; 
    expr alias for $1; 
begin 
    for obj in select * from (
     select 'TABLE' kind, tablename name from _v_table where tablename like upper(expr) 
     union all 
     select 'VIEW' kind, viewname name from _v_view where viewname like upper(expr) 
     union all 
     select 'SYNONYM' kind, synonym_name name from _v_synonym where synonym_name like upper(expr) 
     union all 
     select 'PROCEDURE' kind, proceduresignature name from _v_procedure where "PROCEDURE" like upper(expr) 
    ) x 
    loop 
     execute immediate 'DROP '||obj.kind||' '||obj.name; 
    end loop; 
end; 
end_proc; 
1

Вы можете создать скрипт и выполнить его. что-то вроде этого ...

DECLARE @SQL nvarchar(max) 

SELECT @SQL = STUFF((SELECT CHAR(10)+ 'DROP TABLE ' + quotename(TABLE_SCHEMA) + '.' + quotename(TABLE_NAME) 
       + CHAR(10) + 'GO ' 
       FROM INFORMATION_SCHEMA.TABLES WHERE Table_Name LIKE 'T%' 
       FOR XML PATH('')),1,1,'') 
PRINT @SQL 

Результат

DROP TABLE [dbo].[tTest2] 
GO 
DROP TABLE [dbo].[TEMPDOCS] 
GO 
DROP TABLE [dbo].[team] 
GO 
DROP TABLE [dbo].[tbInflowMaster] 
GO 
DROP TABLE [dbo].[TABLE_Name1] 
GO 
DROP TABLE [dbo].[Test_Table1] 
GO 
DROP TABLE [dbo].[tbl] 
GO 
DROP TABLE [dbo].[T] 
GO 
1

Вы можете найти таблицы с определенным именем в Netezza, используя этот запрос.

select * 
from _v_table a 
where lower(tablename) like 't%' 

@ M.Ali правильно, что вам нужно обернуть результаты в сценарии, если вы хотите автоматизировать сбросив таблицы. Ниже приведен VBScript, который выполнит задачу.

SQL = "select tablename from _v_table a where lower(table_name) like 't%'" 

Set conn = CreateObject("ADODB.Connection") 
conn.Open "NETEZZA_DSN" 

Set rs = conn.execute(SQL) 

    Do while not rs.eof 
     tblnm = rs.fields("tablename") 
     DROP_TABLE_SQL = "drop table " & tblnm 
     wscript.echo "Dropping table: " & tblnm 
     conn.execute DROP_TABLE_SQL 

    rs.movenext() 
    Loop 
conn.close 
wscript.echo "Process Complete" 
-1

Выполните ниже SQL:

SELECT 'DROP TABLE '||TABLENAME||';' FROM _V_TABLE WHERE TABLENAME LIKE 'T%'

Пожалуйста, убедитесь, что правильно база данных выбрана перед выполнением выше запроса.

Этот запрос возвращает результаты, как:

DROP TABLE TABLENAME1; 
DROP TABLE TABLENAME2; 
. 
. 
DROP TABLE TABLENAMEn; 

Теперь, просто скопировать полученный результат SQL в редакторе SQL и удалить все таблицы в один проход.

+0

Это неправильное –

+0

Эй, это для netezza и отлично работает. Сначала прочитайте полный ответ, прежде чем помечать неправильные. – SreedeepS

Смежные вопросы