|
Помогите понять как нужно поступить с хранимой процедурой или множественный выбор ...
|
|||
---|---|---|---|
#18+
Доброго времени суток! Есть специфическая задача завязанная на хранение данных, так как они находятся в памяти аппаратуры. В связи с этим есть таблица текстов для простоты Код: plsql 1. 2.
В этой таблице могут находиться помимо просто текстов и тексты следующего вида Код: pascal 1.
где @23 и @25 - это ссылки на ID=23 и 25 в этой же таблице. Т.е. одна запись в таблице ссылается на другие записи в этой же таблице. Код: plaintext
Задача проверять неиспользуемые элементы и удалять их. Решил попробовать сделать это на стороне БД через ХП. (опыт в ХП практически 0) Сделал ХП, которая распарсивает входную строку и возвращает набор значений ссылок на ID, найденных в переданной строке. Например, Код: plsql 1.
вернет Код: plsql 1. 2. 3. 4. 5.
На этом шаге я застрял. Не пойму что нужно сделать, чтобы просмотреть таблицу текстов и отобразить те записи, на которые нет ссылок в полученном списке по ID. Запрос вида Код: plsql 1. 2. 3.
выдает все записи/ либо ни одной записи в зависимости от "not" думаю что-то упускаю, но не пойму где. Также пробовал делать так Код: plsql 1. 2. 3.
Насколько я понимаю: внутренняя часть Код: plsql 1.
вернет мне набор ID, ссылки на которые найдет MyParse Далее, как я понимаю, должна сравнить A.ID текущей записи таблицы TblText с полученным списком. Конечно, поскольку текущая запись сама на себя не ссылается, то я и получаю пустую выборку. Как мне построить запрос, чтобы сравнить не с текущей записью полученный список, а снова со всей таблицей? и вывести только те записи, для которых будут найдены ссылки. Через distinct оставим только уникальные значения. Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 00:50 |
|
Помогите понять как нужно поступить с хранимой процедурой или множественный выбор ...
|
|||
---|---|---|---|
#18+
vladgulЗадача проверять неиспользуемые элементы и удалять их. То есть удалить из таблицы записи с ID, который не встречается в конструкциях "@XX" любых других записей? vladgul максимально общее количество записей около 10000, а по факту вообще около 3000 База - тоже в памяти "аппаратуры", что вы и из неё выжимаете байты? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 01:28 |
|
Помогите понять как нужно поступить с хранимой процедурой или множественный выбор ...
|
|||
---|---|---|---|
#18+
авторТо есть удалить из таблицы записи с ID, который не встречается в конструкциях "@XX" любых других записей? Верно авторБаза - тоже в памяти "аппаратуры", что вы и из неё выжимаете байты? Да. И как показала практика такая забота об использовании памяти позволила уже не один раз легко добавлять новые свойства и разделы без существенной переделки схемотехники. Я могу решить эту задачу непосредственно в программе, но хочется немного больше разобраться с ХП и подобными действиями на стороне сервера. Сейчас вопрос именно в этом Как мне построить запрос, чтобы сравнить не с текущей записью полученный список, а снова со всей таблицей? Как-то через JOIN ? Как это правильно записать? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 09:45 |
|
Помогите понять как нужно поступить с хранимой процедурой или множественный выбор ...
|
|||
---|---|---|---|
#18+
vladgul, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
но это будет работать ооочень медленно. Рекомендую завести gtt tmp и сначала вставить найденные записи в неё Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 10:25 |
|
Помогите понять как нужно поступить с хранимой процедурой или множественный выбор ...
|
|||
---|---|---|---|
#18+
Симонов Денис vladgul, with t as ( Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Работает неправильно. часть в with всегда возвращает null. А если заменить left join на right join, то вообще выдает ошибку The cursor identified in the UPDATE or DELETE statement is not positioned on a row. no current record for fetch operation Я так понимаю, что с моей ХП что-то не так. собственно текст ХП, которая ищет ссылки в переданной строке. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
Думаю не поставил какую-то директиву связанную с курсором. Как правильно нужно было бы сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 11:32 |
|
Помогите понять как нужно поступить с хранимой процедурой или множественный выбор ...
|
|||
---|---|---|---|
#18+
Симонов Денис vladgul, но это будет работать ооочень медленно. Рекомендую завести gtt tmp и сначала вставить найденные записи в неё Попробовал также пойти другим путем. и создать еще одну ХП, которая вернет список всех найденных значений ID, для всех записей в таблице TblText а уже потом использовать ее результаты. но здесь вообще не получилось Подскажите в чем ошибка Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 11:41 |
|
Помогите понять как нужно поступить с хранимой процедурой или множественный выбор ...
|
|||
---|---|---|---|
#18+
Список ИД для удаления (при условии, что TBLTEXT.TEXT not null) можно определить так Код: sql 1. 2. 3. 4. 5.
Далее сам. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 13:48 |
|
Помогите понять как нужно поступить с хранимой процедурой или множественный выбор ...
|
|||
---|---|---|---|
#18+
vladgulВерно Тогда тупо переводим на англицкий: Код: sql 1. 2. 3.
vladgulДа. Вы реально сэкономите намного, намного больше места если замените эту базу простым текстовым файлом. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 13:53 |
|
Помогите понять как нужно поступить с хранимой процедурой или множественный выбор ...
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Тогда тупо переводим на англицкий: Код: sql 1. 2. 3.
Вот это прям то что надо. БОЛЬШОЕ спасибо. Про такую возможность даже не знал. Dimitry Sibiryakov Вы реально сэкономите намного, намного больше места если замените эту базу простым текстовым файлом. Может я раньше не совсем верно указал. Сама база не хранится в аппаратуре (в виде файла). Просто для удобства разработки, отладки, оперирования данными и для того, чтобы не усложнять степень разработки стараемся делать максимально "похожие" данные на компе и в аппаратуре. Тем более, что тексты это всего ли 1/52 часть от БД. А СУБД очень помогает, при оперировании этими данными. А в аппаратуру "заливается" 95%. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 16:04 |
|
|
start [/forum/topic.php?fid=40&msg=40118941&tid=1559869]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
9ms |
get forum data: |
1ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 248ms |
total: | 357ms |
0 / 0 |