Мы должны хранить оператор выбора в таблицеКак хранить SQL-команды в таблице оракула?
select * from table where col = 'col'
Но одиночные кавычки Messes вставного заявление вверх.
Возможно ли это как-то?
Мы должны хранить оператор выбора в таблицеКак хранить SQL-команды в таблице оракула?
select * from table where col = 'col'
Но одиночные кавычки Messes вставного заявление вверх.
Возможно ли это как-то?
От Oracle 10G на есть альтернатива удвоению одинарные кавычки:
insert into mytable (mycol) values (q'"select * from table where col = 'col'"');
Я использовал двойной кавычки ("), но вы можете указать другую например:
insert into mytable (mycol) values (q'@select * from table where col = 'col'@');
синтаксис литерал:
q'<special character><your string><special character>'
Это не очевидно более читаемо в небольшом примере, подобном этому, но оно окупается большим количеством текста, например.
insert into mytable (mycol) values (
q'"select empno, ename, 'Hello' message
from emp
where job = 'Manager'
and name like 'K%'"'
);
Хороший материал. Сегодня узнал что-то новое о 10g. – jonasespelita
Как вы выполняете вставку? Если вы используете какой-либо провайдер в интерфейсе, тогда он должен отформатировать строку для вас, чтобы кавычки не были проблемой.
В основном создайте параметризованный запрос и присвойте значение оператора SQL экземпляру класса параметров, и пусть слой db позаботится об этом для вас.
Если вы используете язык программирования, такой как JAVA или C#, вы можете использовать подготовленные (параметризованные) операторы, чтобы вставлять ваши значения и извлекать их.
Если вы в SQLPlus вы можете избежать апостроф так:
insert into my_sql_table (sql_command)
values ('select * from table where col = ''col''');
Одинарные кавычки экранируются, дублируя их:
INSERT INTO foo (sql) VALUES ('select * from table where col = ''col''')
Однако большинство библиотек баз данных обеспечивают параметры связывания таким образом Вы не Не нужно заботиться об этих деталях:
INSERT INTO foo (sql) VALUES (:sql)
... а затем вы Значение ssign для: sql.
вы можете использовать две кавычки ''
представлять апостроф '
или (с 10г +) вы можете также использовать new notation:
SQL> select ' ''foo'' ' txt from dual;
TXT
-------
'foo'
SQL> select q'$ 'bar' $' txt from dual;
TXT
-------
'bar'
Не храните SQL заявления в базе данных !!
Магазин SQL Views в базе данных. Поместите их в схему , если вам нужно сделать их чище. Нет ничего хорошего, что когда-либо произойдет, если вы сохраните SQL-выражения в базе данных, за исключением регистрации, это категорически плохая идея.
Также, если вы используете 10g, и вы должны сделать это: сделайте это правильно! Согласно FAQ
Use the 10g Quoting mechanism:
Syntax
q'[QUOTE_CHAR]Text[QUOTE_CHAR]'
Make sure that the QUOTE_CHAR doesnt exist in the text.
SELECT q'{This is Orafaq's 'quoted' text field}' FROM DUAL;
sql динамически генерируется. Сумасшедший .. но нужен. Спасибо за совет! – jonasespelita
Он не генерируется динамически, он экранируется с помощью синтаксиса 'q '/ text /' q', так что'/'может быть любым символом. –
любая причина, по которой вы храните инструкцию sql? –
Сохраненные процедуры и/или функции были бы * намного лучшей идеей. Особенно, если они помещены в пакеты ... –
@ Mitch Wheat Ну, на самом деле это немного сложно. Мы создаем сопоставление ключевых значений из таблицы, и каждый ключ имеет этот столбец sql наряду с другими атрибутами. Столбец sql будет указывать на таблицу, содержащую значения ключа. Дело в том, что этот столбец должен быть динамическим, поэтому значения ключа будут меняться при изменении столбца sql. Довольно сложный дизайн; да. – jonasespelita