Как переписать with as где используется рекурсия?
есть такой код
WITH ParentDocs AS ( SELECT doc.DocId, doc.ParentDocGUID, doc.doc_guid, doc.db_id, 0 AS doc_level, doc.DocId FROM TV_DocsTableInternet doc UNION ALL SELECT e.DocId, e.ParentDocGUID, e.DocGUID, e.db_id, doc_level + 1, d.Cheque_docid as Cheque_docid FROM TV_DCT_Docs e JOIN ParentDocs d ON e.db_id = d.db_id AND e.doc_guid = d.parent_doc_guid AND e.doc_guid <> d.doc_guid ) |
WITH ParentDocs AS ( SELECT doc.DocId, doc.ParentDocGUID, doc.doc_guid, doc.db_id, 0 AS doc_level, doc.DocId FROM TV_DocsTableInternet doc UNION ALL SELECT e.DocId, e.ParentDocGUID, e.DocGUID, e.db_id, doc_level + 1, d.Cheque_docid as Cheque_docid FROM TV_DCT_Docs e JOIN ParentDocs d ON e.db_id = d.db_id AND e.doc_guid = d.parent_doc_guid AND e.doc_guid <> d.doc_guid )
В среде в которой я работаю with не поддерживает рекурсию.
Есть ли какой-то другой способ в SQL переписать эту конструкцию with, чтобы получить ParentDocs, которая была собрана по той же логике что и в конструкции with выше? Как это можно сделать? Спасибо!
Дополнительно:
БД не поддерживает рекурсию?
Если да, то никак. Точнее через SQL не получится, только через хранимые процедуры
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для того чтобы переписать использование оператора `with as` в Python с использованием рекурсии, можно создать функцию, которая будет выполнять те же действия, что и оператор `with as`, но без его использования.
Вот пример кода на Python, который демонстрирует переписанный вариант использования `with as` с использованием рекурсии:
class File: def __init__(self, filename, mode): self.filename = filename self.mode = mode def __enter__(self): self.file = open(self.filename, self.mode) return self.file def __exit__(self, exc_type, exc_value, traceback): self.file.close() def process_file(filename): with File(filename, 'r') as f: data = f.read() # Делаем что-то с данными # Теперь перепишем использование with as с помощью рекурсии def process_file_recursive(filename): file = File(filename, 'r') f = file.__enter__() try: data = f.read() # Делаем что-то с данными finally: file.__exit__(None, None, None) # Теперь можно вызывать функцию process_file_recursive для обработки файла без использования оператора with as
В данном примере `File` - это класс, который имитирует работу с файлом, а функции `process_file` и `process_file_recursive` выполняют одни и те же действия с файлом, но одна использует оператор `with as`, а другая - рекурсивный подход.
Таким образом, вы можете использовать рекурсию для выполнения действий, которые обычно выполняются с помощью оператора `with as` в Python.