Я недавно прочитал о том, как следует избегать курсоров. Хорошо, я хотел бы знать, подходит ли их использование.Должен ли я использовать курсоры SQL здесь?
Я создаю механизм создания сценариев, который будет работать в Интернете (встроен в страницу, на стороне сервера). Этот скриптовый движок будет использоваться «продвинутыми» конечными пользователями этого продукта. Однако продукт работает очень сильно с базой данных, а язык сценариев C-like, но упрощен до того, где он также напоминает PHP. Для баз данных мне в основном нужен синтаксис, подобный этому, так как он является наиболее согласованным синтаксисом, созданным на языке, без того, чтобы конечный пользователь должен был писать код SQL (если мы собираемся заставить их сделать это, почему они не могут просто пропустить скриптовый движок, чтобы сделать жизнь проще). Синтаксис что-то вроде этого:
declare DataSet $data("tablename","OtherID="+$oid);
//Dataset(string tablename,string where_clause_addon)
$data["field1"]="the data of field... ";
$data.Next();
$data["field1"]="The data of the next row";
$data[10]["field1"]="The data of the 10th row";
Я контролирую это внутренне, создавая глобальный курсор для каждого набора данных (я использую только 1 соединение в приложении), а затем давая глобальный курсор отслеживать положение в текущей строке (его также курсор SCROLL и UPDATE). Это делает мою жизнь намного проще, поскольку в противном случае я был бы вынужден писать свои собственные элементы управления SQL для борьбы с DataNeader.
Является ли это использование курсоров ОК одним? Обратите внимание, что страница с этими сценариями не будет доступна по всему миру, она будет доступна только для клиентов (возможно, только 3-10 пользователей одновременно).
Кто-нибудь видит лучший способ отслеживания текущего местоположения переменной? (поскольку они могут обращаться к таблицам с неизвестной схемой)
Кроме того, были ли у меня проблемы с параллелизмом с использованием курсоров, подобных этому? (Мои документы говорят, что курсоры являются глобальными для соединения, и каждый запрос страницы создает новое соединение на месте, поэтому пользователи не используют соединения)
Не могли бы вы объяснить, что вы набираете, просто используя SQL. Я не уверен, что понимаю это. – recursive
О чем вы говорите? вы конвертируете этот «скрипт» в запрос? –
Да, он будет преобразован в запрос. Мы предпочитаем избегать прямого SQL. (Я знаю, что where_clause вещь хакерская, и она будет уточнена) – Earlz