Просмотр результатов запроса с параметрами в Oracle

Мне нужно выполнить большие запросы (это было частью SP) и посмотреть на их результаты (просто пытаюсь найти ошибку в большом SP с множеством объединений. Я хочу разбить ее на части и запустить их отдельно). Как я могу это сделать, если этот SP имеет несколько параметров? Я не хочу заменять их в коде, было бы здорово просто добавить объявление в заголовок с жестким кодом для этого параметра.

Я пробовал что-то вроде этого:

DECLARE

p_asOfDate DATE :=  '22-Feb-2011';

BEGIN

SELECT * from myTable where dateInTable < p_asOfDate;

END

Но это говорит о том, что я должен использовать ключевое слово INTO. Как я могу просмотреть эти результаты в моей IDE? (Я использую Aqua data studio)

Мне нужно делать это очень часто, поэтому буду очень рад, если найду простое решение

1 ответ

Решение

Вы используете анонимный блок кода pl/sql. В процедурах pl/sql необходимо указать целевую переменную для результата.

Поэтому сначала нужно определить переменную для хранения результата в разделе объявления, а затем вставить в нее данные результата.

DECLARE
  p_asOfDate DATE :=  '22-Feb-2011';
  p_result myTable%ROWTYPE;
BEGIN
  select * into p_result from myTable where dateInTable < p_asOfDate;
END

Тем не менее, вы, вероятно, получите более одной возвращенной строки, поэтому я бы использовал курсор, чтобы получить строки отдельно.

DECLARE
  CURSOR c_cursor (asOfDate IN DATE) is 
    select * from myTable where dateInTable < asOfDate;
  p_asOfDate DATE :=  '22-Feb-2011';
  p_result myTable%ROWTYPE;
BEGIN
  OPEN c_cursor(p_asOfDate);
    loop
      FETCH c_cursor into p_result;
      exit when c_cursor%NOTFOUND;
      /* do something with the result row here */
    end loop;
  CLOSE c_cursor;
END

Для вывода результатов вы можете использовать что-то вроде этого, например:

dbms_output.put_line('some text' || p_result.someColumn);

В качестве альтернативы вы можете выполнить запрос в командной строке sql (например, sqlplus) и сразу получить результат в виде таблицы.

Надеюсь, я правильно понял ваш вопрос...

Обновить

Вот другой способ ввести ваши тестовые данные:

Используйте инструменты environemnt для выполнения SQL-запросов, чтобы отправить свой SQL-запрос напрямую без блока pl/sql.

Используйте "&" перед переменной частью, чтобы вызвать подсказку для переменной.

select * from myTable where dateInTable < &p_asOfDate;

Результат должен отображаться в отформатированном виде вашим инструментом таким образом. Я не знаю об Аква, но некоторые инструменты имеют функции для определения этих параметров за пределами кода SQL.

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