powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / просветите малограмотного...
25 сообщений из 25, страница 1 из 1
просветите малограмотного...
    #33138437
*ON*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как правильно написать конструкцию типа
if таблица существует then drop table;
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33138463
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*ON*как правильно написать конструкцию типа
if таблица существует then drop table;
Для малограмотных в данном форуме даже топик сверху вывешен как важный, обязательный для прочтения перед тем, как задавать такие вопросы.
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33138491
*ON*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
их пошутил... лучше бы написал - меньше слов бы ушло...
здесь пытаешься освоить а вы...
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33138516
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*ON*их пошутил... лучше бы написал - меньше слов бы ушло...
здесь пытаешься освоить а вы...
ЧТО НАПИСАТЬ? Подними глаза и прочитай то, что тебе порекомендовали. Или чукча не читатель, а писатель? На твой вопрос невозможно ответить, не зная с каким сервером ты работаешь.
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33138538
*ON*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
написано sybase SQl anywhere ISQl version 5.5.04 а что это такое ASA, ASE или что?
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33138576
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*ON*написано sybase SQl anywhere ISQl version 5.5.04 а что это такое ASA, ASE или что?
Читай FAQ
*ON*
как правильно написать конструкцию типа
if таблица существует then drop table;


Код: plaintext
1.
2.
3.
4.
5.
6.
if exists(
   select  1  from sys.systable 
   where table_name='Table_1'
) then
    drop table Table_1
end if
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33138599
*ON*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
значит все-таки ASA
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33138601
*ON*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за ответ
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33139481
*ON*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а можно попросить объяснить вот это вот:
select 1 from sys.systable
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33139627
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверяется, есть ли такая запись в системной таблице.
Можно было бы написать select * или select 2 или select 123 - без разницы.
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33139628
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*ON*а можно попросить объяснить вот это вот:
select 1 from sys.systable
Аналог вот этого:
Код: plaintext
1.
2.
3.
4.
5.
if exists(
   select * from sys.systable 
   where table_name='Table_1'
) then
    drop table Table_1
end if
Разницы по моему никакой нет, выбирается константа или же поле(я). Главное, что через exists() определяется, есть такая запись в таблице или ее нет в системной таблице systable, принадлежащей владельцу sys, под которым и лежат все системные таблицы и обьекты.
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33141743
*ON*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот еще одно решение такой проблемы:
if object_id ('reporter.table_name') is not null then ...

end if;
что можно сказать по этому поводу?
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33141751
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*ON*вот еще одно решение такой проблемы:
if object_id ('reporter.table_name') is not null then ...

end if;
что можно сказать по этому поводу?
Решений может быть много. Все которые работают и содержат минимум кода - правильные :)
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33141845
michael_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivПроверяется, есть ли такая запись в системной таблице.
Можно было бы написать select * или select 2 или select 123 - без разницы.
Разницы сейчас, наверное нет, а сам стиль такой сложился давно, когда оптимизаторы были примитивные и * в select обрабатывалась одназначно - поиск всех колонок в таблице, даже если эта конструкция стояла внутри exists.
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33179231
*ON*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
начал писать процедуру, но вот не умею использовать переменные в имени таблицы... процедура работает без ошибки, но ничего не делает... никак не могу понять почему... может кто подскажет. а еще расскажите про execetu immediate... плз
alter procedure dbo.neplat()
begin
declare i integer;
set i=1;
while i<12 loop
if object_id('dbo.p58_i_7') is not null then delete from dbo.p58_1_7
else execute immediate 'create table dbo.p58_+i+_7 (\x0D\x0A ind decimal(4) null,\x0D\x0A per_plat char(4) null,\x0D\x0A ls decimal(7) null,\x0D\x0A adr char(40) null,\x0D\x0A fio char(40) null,\x0D\x0A summa decimal(10,2) null,\x0D\x0A ab_nmb decimal(1) null,\x0D\x0A otm char(1) null,\x0D\x0A )';
set i=i+1
end if
end loop
end
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33180747
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*ON*процедура работает без ошибки, но ничего не делает... никак не могу понять почему...
А почему она вообще должна что-то делать? :)
Тебе что нужно? Создать двенадцать одинаковых таблиц с цифровыми именами? Слегка странноватая задача, но ладно:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create procedure dbo.neplat()
begin
  declare i integer;
  declare sTableName char( 32 );
  set i= 1 ;
  while i< 12  loop
    set sTableName = 'p58_' || i || '_7';
    if object_id(sTableName) is not null then
       EXECUTE IMMEDIATE 'drop table ' || sTableName;
    end if;
    EXECUTE IMMEDIATE 'create table ' || sTableName || ' (ind decimal(4) null, per_plat char(4) null, ls decimal(7) null, adr char(40) null, ' ||
                      'fio char(40) null, summa decimal(10,2) null, ab_nmb decimal(1) null, otm char(1) null)';
    set i = i +  1 ;
  end loop;
end;

И в качестве домашнего задания: найди десять отличий между своим кодом и моим :)
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33183011
*ON*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
там в общем в чем проблема - создается процедура - проверяем есть ли таблица dbo.p58_i_7 - если есть - очищается, иначе создается... если берем от if до end if - и выполняем то таблица создается или очищается если она уже была создана - а вот в процедуре она не работает...
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33183519
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDL может требовать, чтобы его оператор был бы отдельным батчем. Я правда не знаю, как это в ASA.
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33183635
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*ON*там в общем в чем проблема - создается процедура - проверяем есть ли таблица dbo.p58_i_7 - если есть - очищается, иначе создается... если берем от if до end if - и выполняем то таблица создается или очищается если она уже была создана - а вот в процедуре она не работает...
Все работает прекрасно хоть в процедуре, хоть в пакете, хоть по отдельности. У тебя в логике ошибок куча. Например в твоем коде проверятеся существование таблицы dbo.p58_i_7, а очищается таблица dbo.p58_1_7. Можешь объяснить почему?
Во вторых знак "+" предназначен для сложения а не конкатенации. Почитай вот эту главу BOL:
Код: plaintext
1.
2.
3.
ASA SQL Reference 
SQL Language Elements 
Operators 
String operators
Плюс непонятно зачем в строку пихаются управляющие символы. Они вроде бы не должны влиять (сходу не могу найти упоминаний о них в документации), но чем черт не шутит? :)
Ну и в конце, концов. Куда ты написал строку "set i=i+1;"? Зачем ты ее внутрь else блока запихал? Если у тебя объект с именем "dbo.p58_i_7" будет существовать - твоя процедура вообще уйдет в вечный цикл.
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33183965
*ON*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну так вот - проверяем - есть ли такая таблица - то есть записи в ней - и если етсь удаляются - иначе таблица создается...
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33183970
*ON*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну да вот тут накосячил.......
if object_id('dbo.p58_i_7') is not null then delete from dbo.p58_ i _7

иначе если таблицы нет - создаем такую таблицу...
else execute immediate 'create table dbo.p58_+i+_7 (\x0D\x0A ind decimal(4) null,\x0D\x0A per_plat char(4) null,\x0D\x0A ls decimal(7) null,\x0D\x0A adr char(40) null,\x0D\x0A fio char(40) null,\x0D\x0A summa decimal(10,2) null,\x0D\x0A ab_nmb decimal(1) null,\x0D\x0A otm char(1) null,\x0D\x0A )';

и тут тоже прокосячил... и переходим к следующей - до i=12
set i=i+1

объясните в чем я конкретно туплю.....
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33187711
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*ON*ну да вот тут накосячил.......
if object_id('dbo.p58_i_7') is not null then delete from dbo.p58_ i _7
Если предполагается что i - переменная, то писать ее внутри строки нельзя. Это ж не управляющий символ.
Посмотри на мой код повнимательнее: 'dbo.p58_' || i || '_7'

*ON*иначе если таблицы нет - создаем такую таблицу...
else execute immediate 'create table dbo.p58_+i+_7
Опять - строку закрывать надо перед использованием переменной. Сейчас ты пытаешься создать таблицу с именем "dbo.p58_+i+_7" Плюсики в имени таблицы быть не могут :)
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33188360
*ON*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
благодарю за помощь... а то так сам до всего и не дойдешь...
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33195446
*ON*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подскажите, как по default проставить в поле таблицы номер месяца (01, 02,.....12)?
...
Рейтинг: 0 / 0
просветите малограмотного...
    #33197512
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m numeric(2) default datepart(month, current timestamp)
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / просветите малограмотного...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]