Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вставка слова в таблицу 
:(
    Опции темы
Sliva
Дата 8.5.2006, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 4.5.2006

Репутация: нет
Всего: нет



У меня  в таблице хранится кроссворд: 
id -  идентификатор слова
x- координата буквы в таблице 
y- координата буквы в таблице
len- длина слова
VH- вертикально расположено или горизонтально
(работаю в PL\SQL)
 Мне нужно вставить слово в кроссворд - должна быть функция вставки.
Подскажите как?  smile  
PM   Вверх
HalkaR
Дата 8.5.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



Так вам на чем на PL\SQL или MySQL? 
PM MAIL   Вверх
Sliva
Дата 9.5.2006, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 4.5.2006

Репутация: нет
Всего: нет



PL\SQL!  smile  Плиз! 
PM   Вверх
Ignat
Дата 9.5.2006, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: нет
Всего: 73




M
Ignat
Перемещено из MySQL

 


--------------------
Теперь при чем :P
PM   Вверх
LSD
Дата 9.5.2006, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Полную структуру таблиц дай, сколько их там у тебя 1 или 2. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Sliva
Дата 9.5.2006, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 4.5.2006

Репутация: нет
Всего: нет



Код
CREATE TABLE  Crossword
(
  id  INTEGER PRIMARY KEY,  // id слова
  x  INTEGER,  // координаты в таблице
  y  INTEGER, //
  len  INTEGER, // длина слова
  word VARCHAR2 (10),  // само слово
  VH INTEGER,  // горизонтально или вертикально
  idT  INTEGER FOREIGN KEY  // id кроссворда, в которой расположено слово
);

Т.е. получается, что у меня есть таблица, в которой хранятся слова, и в которой указано к какому кроссворду они принадлежат.
А мне нужно в PL\SQL написать вставку слова в кроссворд. Help!  smile   
PM   Вверх
LSD
Дата 9.5.2006, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Я не пойму, что должна делать процедура. Никакой обработки вставляемых данных тут нет. Максимум триггером проверить что VH имеет правильное значение и вычислить LEN. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Sliva
Дата 9.5.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 4.5.2006

Репутация: нет
Всего: нет



Дело в том, что программно надо написать процедуру, у которой в параметрах будет слово и его вставить в таблицу. Надо же учитывать на какую позицию вставляем:  Нельзя же вставить слово на место другого слова!  smile  
А про триггеры  нам еще не рассказывали  smile  а как с ними?
 
PM   Вверх
LSD
Дата 9.5.2006, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Т.е. процедура должна перебрать все свободные места и найти нужное? 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Sliva
Дата 9.5.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 4.5.2006

Репутация: нет
Всего: нет



Фактически она должна вставить слово на пустое место, куда захочет пользователь - вот в чем дело  
PM   Вверх
Sliva
Дата 9.5.2006, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 4.5.2006

Репутация: нет
Всего: нет



Если быть точнее, 
то я пишу следю процедуру:
 
Код

PROCEDURE  InsertWord  (w in VARCHAR2(10),  xst in INTEGER, yst in INTEGER, pol in INTEGER, ic in INTEGER)  
 -- st - столбец x  ,str -строка  y, pol - положение слова - по горизонтали -1 или вертикали - 0

IS 

 --  выбирает символ из таблицы   
CURSOR getSymb (st in INTEGER, str in INTEGER) IS
   SELECT word  FROM Crossword WHERE  (x = st)  AND (y = str);

  BEGIN 
     i  INTEGER;
    lenw INTEGER; -- длина слова
    h INTEGER;
    v  INTEGER; 
   symP VARCHAR2(1);  -- текущий символ справа
  symL VARCHAR2(1);  -- текущий символ  слева


    lenw:= LENGTH(w); -- узнали длину вставляемого слова 
   
     open getSymb (xst-1,yst); 
     FETCH getSymb INTO  symL;    --  узнали букву  слева
    open getSymb (xst+1,yst);           
    FETCH getSymb INTO  symP;    --  узнали букву    справа 
      

   IF  ( (symP = '' ) and (pol = 1) )   -- если справа пусто и вставляем слово по горизонтали
     FOR i in xst..lenw 
    LOOP
         UPDATE  Crossword  SET  y = yst, len = lenw, word = w[i],  VH = 1, idT = ic  
             WHERE  x = i; 
    END LOOP;      
   ELSE   --   IF ((symP = "") and (pol ))    -- если справа пусто и вставляем слово по вертикально
    FOR i in yst..lenw 
    LOOP
         UPDATE  Crossword  SET x = xst, len = lenw, word = w[i],  VH = 0, idT = ic  
            WHERE  y = i;              
    END  LOOP;       
  
  END InsertWord; 

 
PM   Вверх
LSD
Дата 10.5.2006, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(Sliva @  9.5.2006,  22:29 Найти цитируемый пост)
Если быть точнее, 
то я пишу следю процедуру:

У тебя тут есть пара небольших синтаксических ошибок, неправильно организован цикл. Но это все лего поправимо, главное я не могу понять как у тебя хранятся в базе слова. Зачем тебе надо делать несколько инсертов в таблицу для каждого слова? И каков смысл тех проверок, что ты делаешь? 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Sliva
Дата 10.5.2006, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 4.5.2006

Репутация: нет
Всего: нет



Я вставляю слово на произвольное место в кроссворде (то бишь в таблицу), но там же может стоять другое слово! Мне нужно проверить:
1. Можно ли вставить слово, т.е. есть ли свободное место;
2. Если там есть слово, то можем ли мы верно вставить слово, например: по горизонтали стоит слово "восток", а я вставляю слово "кот" по вертикали. Т.е. я МОГУ ВСТАВИТЬ, но я должна проверить, что я вставляю на последнюю букву слова "востоК". 
Я сижу сейчас, разбираюсь - тут по идее должна быть целая куча проверок, ifов!!!  
Посмотри, пожалуйста!  smile  
PM   Вверх
LSD
Дата 10.5.2006, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Тогда я думаю лучше будет хранить не слово, а буквы (или ввести еще одну таблицу с буквами), каждую в своей ячейке. И соответсвенно при вставке делать проверки. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Sliva
Дата 10.5.2006, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 4.5.2006

Репутация: нет
Всего: нет



Я, кстати, вчера изменила таблицу. Теперь она выглядит так: 
Код
CREATE TABLE  Crossword
(
  x  INTEGER,  
  y  INTEGER, 
  word VARCHAR2 (1), // буква
  VH boolean,
  idCros FOREIGN KEY 
);

Только со вставкой замучаешься! 
А в моей процедуре InsertWord - тоже тогда в параметрах передавать букву или можно слово?  smile  И вообще корректно в цикле писать, например: for i in 1..len w:= word[i]? 
Если w типа VARCHAR2(1), а word  типа  VARCHAR2(10)????  
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0634 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.