| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Oracle > Вставка слова в таблицу |
| Автор: Sliva 8.5.2006, 13:55 |
| У меня в таблице хранится кроссворд: id - идентификатор слова x- координата буквы в таблице y- координата буквы в таблице len- длина слова VH- вертикально расположено или горизонтально (работаю в PL\SQL) Мне нужно вставить слово в кроссворд - должна быть функция вставки. Подскажите как? |
| Автор: HalkaR 8.5.2006, 13:59 |
| Так вам на чем на PL\SQL или MySQL? |
| Автор: Sliva 9.5.2006, 01:07 |
| PL\SQL! |
| Автор: Ignat 9.5.2006, 12:48 | ||
|
| Автор: LSD 9.5.2006, 13:49 |
| Полную структуру таблиц дай, сколько их там у тебя 1 или 2. |
| Автор: Sliva 9.5.2006, 14:58 | ||
Т.е. получается, что у меня есть таблица, в которой хранятся слова, и в которой указано к какому кроссворду они принадлежат. А мне нужно в PL\SQL написать вставку слова в кроссворд. Help! |
| Автор: LSD 9.5.2006, 16:45 |
| Я не пойму, что должна делать процедура. Никакой обработки вставляемых данных тут нет. Максимум триггером проверить что VH имеет правильное значение и вычислить LEN. |
| Автор: Sliva 9.5.2006, 17:28 |
| Дело в том, что программно надо написать процедуру, у которой в параметрах будет слово и его вставить в таблицу. Надо же учитывать на какую позицию вставляем: Нельзя же вставить слово на место другого слова! А про триггеры нам еще не рассказывали |
| Автор: LSD 9.5.2006, 17:30 |
| Т.е. процедура должна перебрать все свободные места и найти нужное? |
| Автор: Sliva 9.5.2006, 17:49 |
| Фактически она должна вставить слово на пустое место, куда захочет пользователь - вот в чем дело |
| Автор: Sliva 9.5.2006, 21:29 | ||
| Если быть точнее, то я пишу следю процедуру:
|
| Автор: LSD 10.5.2006, 22:47 |
У тебя тут есть пара небольших синтаксических ошибок, неправильно организован цикл. Но это все лего поправимо, главное я не могу понять как у тебя хранятся в базе слова. Зачем тебе надо делать несколько инсертов в таблицу для каждого слова? И каков смысл тех проверок, что ты делаешь? |
| Автор: Sliva 10.5.2006, 23:06 |
| Я вставляю слово на произвольное место в кроссворде (то бишь в таблицу), но там же может стоять другое слово! Мне нужно проверить: 1. Можно ли вставить слово, т.е. есть ли свободное место; 2. Если там есть слово, то можем ли мы верно вставить слово, например: по горизонтали стоит слово "восток", а я вставляю слово "кот" по вертикали. Т.е. я МОГУ ВСТАВИТЬ, но я должна проверить, что я вставляю на последнюю букву слова "востоК". Я сижу сейчас, разбираюсь - тут по идее должна быть целая куча проверок, ifов!!! Посмотри, пожалуйста! |
| Автор: LSD 10.5.2006, 23:14 |
| Тогда я думаю лучше будет хранить не слово, а буквы (или ввести еще одну таблицу с буквами), каждую в своей ячейке. И соответсвенно при вставке делать проверки. |
| Автор: Sliva 10.5.2006, 23:27 | ||
Я, кстати, вчера изменила таблицу. Теперь она выглядит так:
Только со вставкой замучаешься! А в моей процедуре InsertWord - тоже тогда в параметрах передавать букву или можно слово? Если w типа VARCHAR2(1), а word типа VARCHAR2(10)???? |
| Автор: LSD 11.5.2006, 20:53 | ||||||||
| У меня получилось следующая структура: 2 таблицы. Одна содержит слово, координаты начала и направление:
Другая содержит букву, ссылку на слово к которому она принадлежит, координаты:
(при удалении слова все связанные с ним буквы удаляются) Процедура которая для заданного слова заполняет таблицу с буквами:
Триггер на табличку со словами, который при вставке очередного слова будет заполнять таблицу с буквами:
Пользователю на таблицу LETTERS_GRID дать только select, а в таблице WORDS запретить изметять столбец WORD или дописать логику по обработке такой ситуации. |
| Автор: Sliva 11.5.2006, 20:53 |
| Очень нужно! Ответьте, пожалуйста - корректна ли следующая запись: for i in 1..len w:= word[i]? w - БУКВА VARCHAR(1) word - СЛОВО VARCHAR2(10)? |
| Автор: Sliva 11.5.2006, 21:04 |
| Спасибо, LSD! Сейчас буду разбираться |
| Автор: LSD 11.5.2006, 21:13 |
| Плиз |