Вставьте столбец с одинарной кавычкой или апострофом в Oracle - PullRequest
1 голос
/ 10 апреля 2020

Я пытаюсь вставить в таблицу Таблица пользователей от персоны.

Однако столбец first_name в таблице персон содержит апостроф в имени ( Например, Rus'sell ), который мешая мне от успешной вставки. Как мне это исправить?

INSERT INTO USERS VALUES (SELECT FIRST_NAME,.........FROM PERSON);

Ответы [ 3 ]

2 голосов
/ 10 апреля 2020

INSERT INTO USERS VALUES (ВЫБЕРИТЕ FIRST_NAME, ......... ИЗ ЛИЦА);

Прежде всего, ваш оператор вставки синтаксически некорректен . Это повысит ORA-00936: missing expression. Правильный синтаксис для вставки нескольких записей из исходной таблицы:

INSERT INTO table_name SELECT columns_list FROM source_table;

Ключевое слово VALUES используется для вставки одной записи в таблицу с использованием следующего синтаксиса:

INSERT INTO table_name(columns_list) VALUES (expressions_list);

Если у вас уже есть значение, хранящееся в другой таблице, то простой INSERT INTO..SELECT FROM должен работать без проблем. Тем не менее, если вы пытаетесь INSERT INTO..VALUES иметь одинарные кавычки, то лучше всего использовать Техника строковых литералов Синтаксис q'[...]', где символы "[" и "]" могут быть любым из следующих, если они еще не появляются в строке.

  • !
  • []
  • {}
  • ( )
  • <>

Вам не нужно беспокоиться о одинарных кавычках в строке.

create table t(name varchar2(100));
insert into t values (q'[Rus'sell]');
insert into t values (q'[There's a ' quote and here's some more ' ' ']');
select * from t;

NAME
-----------------------------------------------
Rus'sell
There's a ' quote and here's some more ' ' '
1 голос
/ 10 апреля 2020

Я не думаю, что ваш вопрос показывает полную информацию, потому что я могу выполнить следующие утверждения без проблем:

create table person( first_name varchar2(100));
create table users( first_name varchar2(100));
insert into person values ('Rus''sell');
insert into users select first_name from person;
0 голосов
/ 10 апреля 2020

Извинения за неизвестность, если таковые имеются в вопросе. Запрос, с которым я работал, был длинным запросом вставки с несколькими объединениями.

Подводя итог, это был сохраненный профессионал c, где я делал вставку, для которой данные задаются длинным запросом выбора с несколькими объединениями. Одним из столбцов является столбец FIRST_NAME, в котором есть некоторые значения с апострофом (Rus'sell, Sa'm).

Значения оператора вставки генерируются, как показано ниже, что вызывает 'ORA -00917: отсутствует запятая ' ошибка.

INSERT INTO TABLE_NAME values (314159,0,'Rus'sell','Parks','...........) 

Я исправил это, заменив столбец выбора из одинарной кавычки на две одинарные кавычки, прежде чем передать его в оператор вставки, который в основном решил проблему.

REPLACE(FIRST_NAME,'''','''''') AS FIRST_NAME

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...