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

Помогите сделать 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 ?

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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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

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

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