Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 хранимая процедура удаления таблиц  [new]
Andrey Eliseev
Member

Откуда:
Сообщений: 28
Добрый день!
Необходимо написать хранимую процедуру для удаления таблиц, удовлетворяющих условию. Т.е. выполняется запрос, результатом которого является список таблиц (которые потом нужно удалить), далее нужно передать этот список в переменные, и выполнить drop. Написать то написал, но не работает. Не уверен у динамическом sql...
синтаксис не ms sql server, но суть от этого не меняется.

create procedure remove (DName VARCHAR(128))
begin
declare DatabaseName varchar (128);
declare TableName varchar (128);
declare sql_stmt varchar (100);
declare cname cursor for
select t.DatabaseName,
t.TableName

from DBC.Tables t
where DatabaseName like '%' || :DName || '%'
and TableName like any ('%_BKP%','%_TMP%','%_BACKUP%')
and CreateTimeStamp < (current_date - interval '1' month);
open cname;
fetch cname into DatabaseName, Tablename;
set sql_stmt = 'drop table' || :DatabaseName || '.' || :TableName;
prepare stmt1 from sql_stmt;
execute stmt1;
deallocate prepare stmt1;
close cname;
end;
28 апр 12, 13:23    [12485025]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура удаления таблиц  [new]
Virus квартирус
Member

Откуда: Москва
Сообщений: 41
Предположу, что в
'drop table'
минимум нужен пробел после буквы "e".
28 апр 12, 13:31    [12485070]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура удаления таблиц  [new]
Andrey Eliseev
Member

Откуда:
Сообщений: 28
Virus квартирус,

возможно. Но я думаю, что основная проблема в том, что я неправильно применяю динамический sql. Может нужно создать курсор для него.
28 апр 12, 13:33    [12485093]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура удаления таблиц  [new]
Virus квартирус
Member

Откуда: Москва
Сообщений: 41
Общая логика скрипта понятна, хоть я и не знаю, что это за синтаксис.
Нужен текст ошибки хотя бы.
28 апр 12, 13:40    [12485150]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура удаления таблиц  [new]
iljy
Member

Откуда:
Сообщений: 8711
Andrey Eliseev,

sp_MSforeachtable
И не мучьте животное
28 апр 12, 13:54    [12485270]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура удаления таблиц  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
Andrey Eliseev
Написать то написал, но не работает. Не уверен у динамическом sql...
синтаксис не ms sql server, но суть от этого не меняется.
Не работает, очевидно, из за ошибки. А ошибку здесь найти не помогут, потому что "синтаксис не ms sql server"...

В ms sql server нет конструкции prepare stmt1 from sql_stmt, а "execute stmt1" не вызов динамического SQL

Ну и ещё поможет чтение сообщения об ошибке.
28 апр 12, 14:06    [12485346]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура удаления таблиц  [new]
Andrey Eliseev
Member

Откуда:
Сообщений: 28
SPL1033:E(L16), Unexpected text ':'.
SPL1033:E(L16), Unexpected text ':'.
SPL1030:E(L17), Referring to undefined cursor 'stmt1'.
SPL1027:E(L18), Missing/Invalid SQL statement'E(3707):Syntax error, expected something like an 'END' keyword between ';' and the 'execute' keyword.'.
SPL1030:E(L19), Referring to undefined cursor 'stmt1'.
SPL1003:E(L19), Unexpected text 'stmt1' in place of statement.
28 апр 12, 14:20    [12485447]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура удаления таблиц  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
А у вас точно MSSQL?
28 апр 12, 15:19    [12485874]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура удаления таблиц  [new]
Andrey Eliseev
Member

Откуда:
Сообщений: 28
нет, это терадата.
Просто sql везде похож. А по терадате специалистов не много. Поэтому решил спросить здесь.
28 апр 12, 15:28    [12485933]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура удаления таблиц  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Не надо вводить людей в заблуждение.
28 апр 12, 15:30    [12485950]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить