Можно ли параметризовать запрос внутри pl sql?

Записываемые здесь хранимые процедуры в настоящее время объединяют параметры с запросами:

   SELECT * 
     FROM Names 
    WHERE Name = ' || prmName || ' 
 ORDER BY ' || prmSortField

Можно ли параметризовать этот запрос внутри хранимой процедуры? Возможно, как:

query = 'select * From Names Where Name = @name Order By ' || prmSortField
call(query, prmName)

Примечание:
Если вам интересно, зачем мы это делаем, есть два общих параметра для наших SP: sortFieldIndex и sortDirection. Поскольку мы не можем напрямую параметризовать их, запрос создается динамически. Но другие параметры делают запросы открытыми для внедрения. Итак, я ищу способ параметризации некоторых параметров.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
7 482
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Абсолютно. Используйте курсоры.

DECLARE
  CURSOR c1 (job VARCHAR2, max_wage NUMBER) IS
    SELECT * FROM employees WHERE job_id = job AND salary > max_wage;
BEGIN
  FOR person IN c1('CLERK', 3000)
  LOOP
     -- process data record
    DBMS_OUTPUT.PUT_LINE('Name = ' || person.last_name || ', salary = ' ||
                         person.salary || ', Job Id = ' || person.job_id );
  END LOOP;
END;

А как насчет переменной prmSortField OP? Как можно параметризовать поле упорядочивания без динамических запросов?

Thiago Arrais 12.05.2011 23:38

Для динамического запроса со значениями привязки сделайте следующее:

procedure p (prmName varchar2, prmSortField varchar2)
is
    query varchar2(100);
    rc sys_refcursor;
    names_rec names%rowtype;
begin
    query = 'select * From Names Where Name = :name Order By ' || prmSortField
    open rc for query using prmName;
    loop
        fetch rc into names_rec;
        exit when rc%notfound;
        -- process this row
    end loop;
    close rc;
end;

Для более сложной процедуры, которая поддерживает значения необязательных параметров (но использует контекст sys), ознакомьтесь со следующим сообщением на Asktom.com.

PRATTY - Спасибо за вопрос, касающийся "КУРСОРА" ...

Другие вопросы по теме