Перейти к контенту

Помогите сделать SQL запрос


Рекомендуемые сообщения

Как сделать запрос на изменение префиксов таблиц?

Скажем у меня xx_ а я хочу yyyyy_

А то каждую таблицу в ручную редактировать - это самоубийство...

Ссылка на комментарий
Поделиться на других сайтах

Нет, поэтому и сказал теоретически. Сегодня проверю, но проблем не должно быть, кроме прав, не помню, можно ли из процедур alter table делать и show tables выполнять
Ссылка на комментарий
Поделиться на других сайтах

Или написать маленький скриптик, который будет генерить все нужные запросы :D

Можно и просто в редакторе заменой сделать такой список из списка таблиц.

Ссылка на комментарий
Поделиться на других сайтах

А в чем пробелма-то?

 

ALTER TABLE старое-имя-таблицы RENAME новое-имя-таблицы

 

делаеш скриптик он переименовывает нужные тебе таблицы да и все

я точно сейчас ен помню но можно регуляркой выбрку таблиц описать тогда и одним запросом получится переименовку провернуть

Ссылка на комментарий
Поделиться на других сайтах

xRay, для всех таблиц заменить префикс. Их там порядка сотни, товарисчу лень :D
Ссылка на комментарий
Поделиться на других сайтах

Да, к сожалению MySql не позволяет использовать в Rename Table в качестве параметров пользовательские переменные

 

create procedure renpref ()

begin

declare str varchar (50);

declare strnew varchar (50);

declare is_end INT Default 0;

declare curtab cursor for show tables;

declare continue handler for not found set is_end=1;

open curtab;

wet: LOOP

fetch curtab into str;

if is_end then LEAVE wet;

END IF;

set strnew = insert(str,1,instr(str,'_'),'tst_');

Rename table @str to @strnew;

END LOOP wet;

CLOSE curtab;

end;

 

а жаль (

Ссылка на комментарий
Поделиться на других сайтах

Только PHP-скриптом. Берем в цикле имена таблиц, выкидываем префикс, добавляем новый и альтерим табличку.
Ссылка на комментарий
Поделиться на других сайтах

Да, к сожалению MySql не позволяет использовать в Rename Table в качестве параметров пользовательские переменные

ой ну надо же :)

 

Можно в 5-ом мускуле заселектив из специальной базы. Она называется information_schema

Пошли вслед за Ораклом.

Ссылка на комментарий
Поделиться на других сайтах

Да с схемой то изначально было понятно, это бы я сделал, только не выход ) далеко не у всех права есть такие )
Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

Вобщем все- таки я был прав.

Вот решение:

 

create procedure renpref (newpref varchar(4))
begin
declare str varchar (50);
declare strnew varchar (50);
declare is_end INT Default 0;
declare curtab cursor for show tables;
declare continue handler for not found set is_end=1;
open curtab;
wet: LOOP
fetch curtab into str;
if is_end then LEAVE wet;
END IF;
set strnew = insert(str,1,instr(str,'_'),newpref);
call rentable(str,strnew);
END LOOP wet;
CLOSE curtab;
end;

create procedure rentable (old_name varchar(50),new_name varchar(50))
begin
set @renq = concat('Rename table ',old_name,' to ',new_name);
prepare execq from @renq;
execute execq;
end;

 

вызов

call renpref('pref');

где

pref: новый префикс таблица (3 символа) и завершающий знак подчеркивания.

пример:

call renpref('tst_');

Ссылка на комментарий
Поделиться на других сайтах

Если не сложно, перепишите для произвольного префикса, не обяз. с подчёркиванием :D
Ссылка на комментарий
Поделиться на других сайтах

Само собой, но речь о вресии выше не шла =)

 

Если не сложно, перепишите для произвольного префикса, не обяз. с подчёркиванием

Не получится без подчеркивания, в противном случае как отделять префикс от названия таблицы ? )

 

Хотя можно конечно в параметрах передавать: старый префикс, новый префикс, тогда будет работать. Ок, сделаю

 

Вот:

Создать две хранимых процедуры:

 

create procedure renpref (oldpref varchar(10),newpref varchar(10))
begin declare str varchar (50);
declare strnew varchar (50);
declare is_end INT Default 0;
declare curtab cursor for show tables;
declare continue handler for not found set is_end=1;
open curtab;
wet: LOOP
fetch curtab into str; if is_end then LEAVE wet;
END IF;
set strnew = insert(str,1,length(oldpref),newpref);
call rentable(str,strnew);
END LOOP wet;
CLOSE curtab;
end;

 

 

create procedure rentable (old_name varchar(50),new_name varchar(50))
begin set @renq = concat('Rename table ',old_name,' to ',new_name);
prepare execq from @renq; execute execq;
end;

 

Использовать:

call renpref ('ваш старый префикс','ваш новый префикс');

префиксы могут быть любыми.

Ссылка на комментарий
Поделиться на других сайтах

Само собой, но речь о вресии выше не шла =)

ну дык в 5-ом можно и без такого гемора, я уже выше писал как.

Ссылка на комментарий
Поделиться на других сайтах

Хм, только твой способ несколько непонятен: information_schema апдейтить нельзя. Тогда какой смысл?

получить список таблиц из триггера мы и так можем, show tables из триггера ничего не мешает вызвать, вопрос то был именно в переименовании, а через information_schema переименовать нельзя.

Ссылка на комментарий
Поделиться на других сайтах

Всмысле select-ом ?

ничо не понял ) чем show tables-то не нравится ? ) или ты говоришь чтобы реализовать без store proc ?

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.