Как вызвать хранимую процедуру в SQL-разработчике, где аргумент является длинной строкой с возвратом каретки - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь запустить хранимую процедуру, которая принимает строку с возвратом каретки в качестве аргумента в сеансе SQL Developer.В частности, сама строка является оператором SQL, который извлекается процедурой, обрабатывается и сохраняется в таблице.

Проблема состоит в том, чтобы найти способ сохранить читаемое форматирование операторов, т. Е. Текста с несколькими строками /возврат каретки.Самое близкое, что я получил, это следующее:

1) Создайте новую таблицу для хранения операторов SQL:

CREATE TABLE sql_table
(
    id NUMBER,
    sql_string  CLOB
);

2) Создайте хранимую процедуру:

CREATE OR REPLACE PROCEDURE 
   update_sql(var_id NUMBER, var_sql_string IN CLOB) IS 
BEGIN
    INSERT INTO sql_table (id, sql_string) VALUES (var_id, var_sql_string);
    --do other stuff
END; /

3) Запустите следующую команду, чтобы добавить в таблицу новую строку с оператором sql:

EXEC update_sql(127,'&input');

4) В командной строке введите оператор из нескольких строк, например:

SELECT * 
FROM any_table
WHERE a = b;

5) Затем запросите sql_table, скопируйте и вставьте содержимое столбца sql_string в текстовый редактор - возврат каретки теперь отсутствует:

SELECT * FROM any_table WHERE a=b;

Как уже упоминалось, я хотел бы сохранить кареткувозвращается, так что операторы хорошо отображаются при извлечении из таблицы.

Любая помощь приветствуется.

Спасибо,

Денис

1 Ответ

0 голосов
/ 29 января 2019

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

DECLARE
  VAR_ID NUMBER;
  VAR_SQL_STRING CLOB;
BEGIN
  VAR_ID := 4;
  VAR_SQL_STRING := q'[SELECT
  * FROM EMPLOYEES
  WHERE FIRST_NAME = 'JEFF']';

  UPDATE_SQL(
    VAR_ID => VAR_ID,
    VAR_SQL_STRING => VAR_SQL_STRING
  );
--rollback; 
END;

Функция q для строковых литералов довольно удобна, потому что онаобрабатывает для вас строки в кавычках автоматически, что у вас будет повсюду в вашем SQL.Об этом Стивен Фюрштайн рассказывает здесь, в своей статье, охватывающей строки в PL / SQL .

Вы не говорите, КАК вы извлекаете данные ...

Как уже упоминалось, я хотел бы сохранить возврат каретки, чтобы операторы хорошо отображались при извлечении изтаблицу.

Но просмотр таблицы в SQL Developer -

enter image description here

...