|
Триггер
|
|||
---|---|---|---|
#18+
Помогите пожалуйста) мне нужно написать триггер который запрещает изменение некоторых значений. Эти значения я нахожу вот так: (select fname from Faculty natural join( select fid from( select fid,count(fid) as c from Relationship group by fid) where c>0))); Потом делаю триггер: CREATE TRIGGER error BEFORE UPDATE OF fname ON Faculty BEGIN SELECT RAISE(FAIL, "Произошла ошибка, на этом факультете учатся студенты") FROM Faculty WHERE (fname=(select fname from Faculty natural join( select fid from( select fid,count(fid) as c from Relationship group by fid) where c>0))); END; Но этот триггер ввобще запретил обновлять fname в таблице, а мне нужен запрет только на нужные. как это сделать? помогите пожалуйста) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 21:26 |
|
Триггер
|
|||
---|---|---|---|
#18+
Ярослав1998Помогите пожалуйста) мне нужно написать триггер который запрещает изменение некоторых значений. Эти значения я нахожу вот так: (select fname from Faculty natural join( select fid from( select fid,count(fid) as c from Relationship group by fid) where c>0))); Потом делаю триггер: CREATE TRIGGER error BEFORE UPDATE OF fname ON Faculty BEGIN SELECT RAISE(FAIL, "Произошла ошибка, на этом факультете учатся студенты") FROM Faculty WHERE (fname=(select fname from Faculty natural join( select fid from( select fid,count(fid) as c from Relationship group by fid) where c>0))); END; Но этот триггер ввобще запретил обновлять fname в таблице, а мне нужен запрет только на нужные . как это сделать? помогите пожалуйста) Триггер прав, ему - 5, вам - 2 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 09:47 |
|
Триггер
|
|||
---|---|---|---|
#18+
Ролг Хупин, вы знаете как исправить? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 13:07 |
|
Триггер
|
|||
---|---|---|---|
#18+
Ярослав1998Ролг Хупин, вы знаете как исправить? Зачем так Код: sql 1. 2. 3. 4. 5. 6.
а не так Код: sql 1. 2. 3. 4. 5. 6.
и так Код: sql 1. 2. 3. 4. 5. 6.
"Но этот триггер ввобще запретил обновлять fname в таблице, а мне нужен запрет только на нужные. как это сделать? " Он запретил обновлять все, которые попадают в вашу выборку. Что такое "нужные" - знаете только вы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 13:51 |
|
Триггер
|
|||
---|---|---|---|
#18+
Ролг Хупин, ну проблема же не в этом) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 16:43 |
|
Триггер
|
|||
---|---|---|---|
#18+
Ролг Хупин, у меня есть 5 записей, этот селект выводит 4, их мне нельзя переименовать, а 5, которая не входит в эту выборку, нужно сделать так, чтобы можно было переименовать ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 16:45 |
|
Триггер
|
|||
---|---|---|---|
#18+
Ярослав1998Ролг Хупин, у меня есть 5 записей, этот селект выводит 4, их мне нельзя переименовать, а 5, которая не входит в эту выборку, нужно сделать так, чтобы можно было переименовать Я написал уже "Что такое "нужные" - знаете только вы." Приведите подробности, структуру, пример ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 16:58 |
|
Триггер
|
|||
---|---|---|---|
#18+
Ролг Хупин, у меня есть такие таблицы: факультет, студенты и связь. Связь - ид студента, ид факультета. Мне нужно запретить изменение имени факультета, на котором учится хотя бы один студент. Факультеты, на которых есть студенты я вывожу вот тем селектом. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 17:25 |
|
Триггер
|
|||
---|---|---|---|
#18+
White Owl, CREATE TABLE "Faculty" ( `fID` NUMBER NOT NULL, `fName` TEXT, `initiation` DATE, `fullName` TEXT, PRIMARY KEY(`fID`) ) CREATE TABLE "Student" ( `sID` NUMBER NOT NULL, `Name` VARCHAR, `lName` VARCHAR, `sName` VARCHAR, `Course` INTEGER CHECK(1 <= Course <= 6), `Birthdates` VARCHAR, `Telephone` VARCHAR, `GPA` INTEGER, `entry` DATE, PRIMARY KEY(`sID`) ) CREATE TABLE `Relationship` ( `sID` NUMBER, `fID` NUMBER, FOREIGN KEY(`sID`) REFERENCES `Student`(`sID`) on delete cascade ) Я прикрепил бд. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 19:21 |
|
Триггер
|
|||
---|---|---|---|
#18+
Ярослав1998White Owl, CREATE TABLE "Faculty" ( `fID` NUMBER NOT NULL, `fName` TEXT, `initiation` DATE, `fullName` TEXT, PRIMARY KEY(`fID`) ) CREATE TABLE "Student" ( `sID` NUMBER NOT NULL, `Name` VARCHAR, `lName` VARCHAR, `sName` VARCHAR, `Course` INTEGER CHECK(1 <= Course <= 6), `Birthdates` VARCHAR, `Telephone` VARCHAR, `GPA` INTEGER, `entry` DATE, PRIMARY KEY(`sID`) ) CREATE TABLE `Relationship` ( `sID` NUMBER, `fID` NUMBER, FOREIGN KEY(`sID`) REFERENCES `Student`(`sID`) on delete cascade ) Я прикрепил бд.Не забывай кнопку SRC. Она прямо над полем текста у форума. Приведи скрипт наполнения этих трех таблиц данными. Покажи какие конкретно записи надо трогать триггером, а какие не надо. И опиши словами чем эти две группы записей различаются. Ярослав1998 у меня есть такие таблицы: факультет, студенты и связь. Связь - ид студента, ид факультета. Мне нужно запретить изменение имени факультета, на котором учится хотя бы один студент. Факультеты, на которых есть студенты я вывожу вот тем селектом. Ты уверен что тебе нужны все три таблицы для этой задачи? А вообще, по коду: - Если ты делаешь внешний ключ в Relationship на Student, то почему не делаешь на Faculty? - Не обрамляй имена таблиц и полей ни в кавычки, ни в апострофы - не нужно это. - Не надо делать тройные сравнения (1 <= Course <= 6) - это работать не будет. - В таблице Student, три поля: Name, lName и sName - мой хрустальный шар не может подсказать какие данные ожидаются в этих полях. - В таблице Student, поле Birthdates - это предполагается что студент рождался три-четыре раза? Может тогда в отдельную таблицу это выделить? - В таблице Student, поле Birthdates это VARCHAR, а entry DATE. Почему? И кстати, ты знаешь что в sqlite нету типа DATE? - Почему половина полей начинается с прописной буквы, а половина с заглавной? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 21:02 |
|
Триггер
|
|||
---|---|---|---|
#18+
White Owl, 1) нету внешнего ключа, потому что так было поставлено задание в лабораторной. 2) я не обрамлял, когда создавал. В DB SQLite можно скопировать CREATE любой таблицы 3) у мене этот чек сработал) 4)Имя Фамилия Отчество 5)таблица создана для всех студентов, тоисть у меня не может быть 2 одинаковых студента, знаю, что таблица не совсем правильно построена потому что есть поле Course , а один студент может быть на 2 факультетах, на разных курсах. Закину это поле в таблицу Relationships остальное- ошибки в процессе обучения, я новичек. Я принимаю и понимаю критику, но не правильные типы и названия полей, не влияют на построение моего триггера) Вопрос был относительно триггера и как наложить его на некоторые значения. Вы можете мне в этом помочь?) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 21:37 |
|
Триггер
|
|||
---|---|---|---|
#18+
White Owl, а задание звучит так: создать триггер , который запрещает переименовать факультет, на котором учатся студенты. Мой селект, показывает какие именно значения нельзя изменять. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 21:39 |
|
Триггер
|
|||
---|---|---|---|
#18+
Ярослав1998White Owl, 1) нету внешнего ключа, потому что так было поставлено задание в лабораторной. 2) я не обрамлял, когда создавал. В DB SQLite можно скопировать CREATE любой таблицы 3) у мене этот чек сработал) 4)Имя Фамилия Отчество 5)таблица создана для всех студентов, тоисть у меня не может быть 2 одинаковых студента, знаю, что таблица не совсем правильно построена потому что есть поле Course , а один студент может быть на 2 факультетах, на разных курсах. Закину это поле в таблицу Relationships остальное- ошибки в процессе обучения, я новичек. Я принимаю и понимаю критику, но не правильные типы и названия полей, не влияют на построение моего триггера) Вопрос был относительно триггера и как наложить его на некоторые значения. Вы можете мне в этом помочь?) ps новичек->новичок не правильные типы->неправильные типы ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 22:02 |
|
Триггер
|
|||
---|---|---|---|
#18+
Ярослав1998White Owl, 1) нету внешнего ключа, потому что так было поставлено задание в лабораторной.То есть задание ТРЕБУЕТ чтобы был один внешний ключ и не было другого? Ярослав19982) я не обрамлял, когда создавал. В DB SQLite можно скопировать CREATE любой таблицыСкрипты не создают, скрипты пишут. Потому что их потом люди читать будут а "создаватели" добавляют кучу лишней ерунды которая мешает человеческим глазам. Ярослав19983) у мене этот чек сработал)А ты попробуй задать Course=-10 Ярослав19984)Имя Фамилия ОтчествоСерьезно? А откуда люди это могут узнать? Вот представь что кто-то дал тебе твой скрипт и попросил его "слегка" поправить. Как ты узнаешь что в поле sName надо писать отчество? Ярослав1998остальное- ошибки в процессе обучения, я новичек. Я принимаю и понимаю критику, но не правильные типы и названия полей, не влияют на построение моего триггера) Вопрос был относительно триггера и как наложить его на некоторые значения. Вы можете мне в этом помочь?)Влияют и очень сильно. Чем грязнее твой код - тем сложнее в нем разобраться. И тем легче допустить ошибки. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 23:26 |
|
Триггер
|
|||
---|---|---|---|
#18+
Ярослав1998White Owl, а задание звучит так: создать триггер , который запрещает переименовать факультет, на котором учатся студенты. Мой селект, показывает какие именно значения нельзя изменять.Я не знаю что показывает твой скрипт. Мне он не показывает ничего кроме "syntax error". Если я правильно понимаю структуру твоей базы, то чтобы узнать есть ли студенты на факультете достаточно посчитать строки в таблице Relationship: Код: sql 1.
И твоя проверка в триггере будет соответсвенно Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 23:34 |
|
|
start [/forum/topic.php?fid=54&fpage=4&tid=2008468]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 129ms |
0 / 0 |