Mysql select into не работает

Mysql select into не работает

Привет всем!
Подскажите плз, почему не работает sql запрос типа select . into в Tquery?

И еще . Какой тип данных надо использовать для занесения туда даты и времени? Типа SQL-евского TIMESTAMP?
Почему-то записи типа DECLARE VARIABLE DAT_TO TIMESTAMP;
он тоже воспринимать не хочет. =((


ANB © ( 2006-10-25 17:28 ) [1]


> DECLARE VARIABLE DAT_TO TIMESTAMP;

А парадокс такое понимать должен ?

А смысл в select into в парадоксе ? Или его обучили pl/sql блоки выполнять ?


Johnmen © ( 2006-10-25 17:29 ) [2]


> Подскажите плз, почему не работает sql запрос типа select
> . into в Tquery?

Нам отсюда не видно, что не работает. Поэтому предполагаю, что работает. )

>он тоже воспринимать не хочет. =((

Нам отсюда не видно, что не хочет. Поэтому предполагаю, что хочет. )


Despo ( 2006-10-25 17:37 ) [3]

ну мне надо значение, полученное в результате выборки select . from . where . записать в какую-либо переменую. Я же могу это как-то сделать? Я пытался осуществить это с помощью select into но вот товарищ ANB говорит что PARADOX это не понимает. А как тогда?


Stanislav © ( 2006-10-25 17:39 ) [4]

В таблицу можна, помоему.
Insert into table
Select * from

патамучта локалsql наверное не поддерживает конструкцию.


Desdechado © ( 2006-10-25 17:53 ) [6]

Query.SQL.Text:=»SELECT fldname FROM tablename»;
Query.Open;
tvoya_peremennaja:=Query.Fields[0].AsString;


Desdechado © ( 2006-10-25 17:56 ) [7]

Despo (25.10.06 17:24)
Ты путаешь переменные, которые обрабатывает сервер (они именованные и могут быть созданы, но не в парадоксе), с переменными, о которых знает твоя программа (они в нее вкомпилированы). Так вот — эторазные переменные. Сервер не знает о вкомпилированных в твою EXE переменных, а твой EXE не знает о переменных, обрабатываемых сервером.
Обмениваться они могут только командами и наборами данных.
Переменные не относятся ни к командам, ни к наборам данных. Это другая сущность.


ANB © ( 2006-10-25 18:00 ) [8]


> Обмениваться они могут только командами и наборами данных.

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


Despo ( 2006-10-25 18:30 ) [9]


> почему не работает sql запрос типа select . into в Tquery

А должно, ответ — не должно.

Источник

SELECT INTO и ошибка «Необъявленная переменная»

Когда я пытаюсь выполнить следующий запрос:

Я получаю сообщение об ошибке:

# 1327 — Необъявленная переменная: newsletter_to_send

Что не так с этим запросом?

ОТВЕТЫ

Ответ 1

PS: вы уверены, что в разделе WHERE не требуется?

Ответ 2

MySQL не поддерживает синтаксис SELECT . INTO . .

Для выполнения этого нужно использовать синтаксис INSERT INTO . SELECT .. .

Ответ 3

Я думаю, вы можете следовать моему устному пути и, надеюсь, вы сможете исправить свою проблему.

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

После этого вы можете использовать эту команду для копирования этих данных

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

Спасибо Мадхут Хоссейн

Ответ 4

Ответ 5

MySQL не поддерживает SELECT INTO [table] . Он поддерживает только SELECT INTO [variable] и может выполнять только одну переменную за раз.

Что вы можете сделать, однако используйте синтаксис CREATE TABLE с SELECT следующим образом:

Ответ 6

Я пробовал работать над этим только сейчас, и это работает для меня:

Ответ 7

MySQL Server не поддерживает SELECT. INTO TABLE Расширение Sybase SQL. Вместо этого MySQL Server поддерживает стандартный синтаксис SQL INSERT INTO. SELECT, что в основном одно и то же. См. Раздел 12.2.5.1, «INSERT. SELECT Syntax».

Ответ 8

MySQL не поддерживает синтаксис SELECT. INTO.

если это новая таблица, используйте синтаксис CREATE TABLE. SELECT.

Ответ 9

MySQL не поддерживает SELECT INTO [table] . Он поддерживает только SELECT INTO [variable] и может выполнять только одну переменную за раз.

Однако вы можете использовать синтаксис CREATE TABLE с SELECT следующим образом:

Источник

Оператор SELECT не работает после INSERT INTO

Итак, я закончил свой первый год программирования, поэтому я немного знаю о SQL, но я не могу найти решение / объяснение этой проблемы. Я знаю, что вы можете выполнять заявления после друг с другом; но когда я пытаюсь сделать это после вставки в оператор [table], это не работает для меня. Я пробовал это до сих пор:

Я всегда получаю сообщение о том, что первая точка с запятой неверна. Действительно был бы признателен, если бы кто-то мог объяснить, почему это происходит так. Также это делает только оператор SELECT или каждая команда после INSERT INTO

ОП опубликовал это изображение определения таблицы в качестве ответа. Просто добавьте это здесь ради всех.

РЕДАКТИРОВАТЬ 2: Я только использовал эти значения в качестве примера, они не были фактическими значениями, которые я использовал в своем запросе, но теперь я обновил их с реальными значениями, но это не имеет никакого значения .

2 ответа

Я знаю, что вы можете выполнять заявления после друг с другом;

Как вы обнаружили, нет, вы не можете.

В Oracle есть два языка, которые нужно разделять. SQL, как то, что вы делаете, и PL / SQL, используемый в пакетах, функциях, анонимных блоках PL / SQL, триггерах и т. Д.

В PL / SQL точка с запятой — это терминатор оператора, и его можно использовать в середине строки, чтобы поместить в строку более одного оператора, так же, как в обычных языках.

В SQL Oracle точка с запятой недопустима . Что сбивает с толку, так это то, что инструменты client , такие как SQLPlus, используют точку с запятой в конце строки в качестве ограничителя для операторов SQL, но эта точка с запятой удаляется перед оператором отправляется на сервер базы данных. Клиент отвечает за разделение операторов SQL перед их анализом сервером. Многие другие инструменты следуют примеру SQL * Plus в использовании точки с запятой.

Итак, SQL * PLus, видя insert , говорит сам себе «оператор SQL» и затем читает, пока строка не заканчивается точкой с запятой. Затем он отправляет то, что прочитал минус точку с запятой на сервер базы данных, чтобы выполнить SQL-оператор single . Парсер SQL Oracle не знает, что делать с внутренней точкой с запятой и дросселями.

Обратите внимание, что в SQLPlus можно изменить терминатор оператора SQL с помощью set sqlterminator . , но я редко видел, чтобы это делалось на практике.

Удалите предложение значений и точку с запятой между тем, что выглядит как два оператора, и оператор должен выглядеть так:

Источник

Не работает SELECT INTO

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Не работает Select
почему не работает инструкция селект? не могу добавить столбцы в таблице в схеме данных Visual.

не работает SELECT FROM WHERE
Проблема: элементарный скрипт не хочет работать. 4

SQL выводит 1 результат к примеру число 314
а PL/SQL говорит NO_DATA_FOUND

Пробовал писать в других пакетах, новые создавать, так же в явных/неявных курсорах. Пробовал разные a.idcardfield и a.idcard использовать. все бесполезно.

Хотя при этом существуют другие функции которые работают с этой таблицей и все отлично.
Версия ORacle 9.2 насколько помню )))

Добавлено через 10 минут
И думаю нет смысла проверять запрос и думать о нем, его условиях и т.п.
Прошу рассматривать сам принцип обращения к таблице SELECT INTO в PL/SQL.
Подозреваю что проблема либо в кэше таблицы или БД самой.. бог его знает. я не знаю как там оно вертится и крутится, мое дело запросы писать )))) и запрос точно правильный. Не работает только при обращении к этой таблице, с остальными подобный запрос работает без проблем.

Добавлено через 3 минуты
Если «видимо-известных» причин нет, то тогда удалите тему, чтоб хлама не было.
Просто если проблема не в БД не может быть, тогда в софте что работает с БД и его не изменить, т.к. нет исходников.
Просто решил тут задать вопрос, т.к. исходник софта недоступен а значит я беспомощен, вдруг бывала такая проблема.

Источник

SQL INSERT INTO: примеры вставки строк в таблицу БД MySQL

SQL оператор INSERT используется для вставки записей в существующую таблицу.

Синтаксис этого оператора следующий:

Создадим тестовую таблицу

Давайте создадим таблицу table1 со столбцами a, b, c в нашей MySQL базе данных:

Запрос на вставку строки

Простой запрос, который вставляет строку со столбцами 111, 222 и 333 выглядит так:

Еще один способ сделать то же самое:

Столбцы, которые вы не перечислите заполняются значениями по умолчанию, которые вы предусматриваете при создании таблицы, даже если это просто NULL.

У таблиц обычно есть поле id с первичным ключом (PRIMARY KEY) таблицы. Если этому полю установлено значение AUTOINCREMENT т.е. оно заполняется автоматически, то в таком случае вы не должны его перечислять в списке столбцов оператора INSERT.

Вставка без перечисления столбцов

Если количество значений, которые мы вставляем = количеству столбцов в таблице, то можно не перечислять столбцы, и наш запрос может выглядеть так:

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

Вставка сразу нескольких строк с помощью INSERT INTO

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

Таким образом мы вставили 3 строки в нашу таблицу table1. Их может быть и больше. В MySQL четкого предела нет, однако он все таки существует и зависит от параметра max_allowed_packet который ограничивает размер запроса. Если вы установите SET GLOBAL max_allowed_packet=524288000; то размер запроса будет ограничен 500MB но делайте это в очень крайнем случае. Обычно всегда можно найти решение и разделить 1 большой запрос, на несколько более мелких и вставлять например не больше 1000 строк за один цикл.

Как вставить значение из другой таблицы INSERT INTO . SELECT .

Допустим у нас есть еще одна таблица table2 которая по структуре точно такая же как и первая. Нам в таблицу table2 нужно вставить все строки из table1.

Вставляем значения из table1 в таблицу table2:

Вам следует позаботиться об уникальности ключей, если они есть в таблице, в которую мы вставляем. Например при дублировании PRIMARY KEY мы получим следующее сообщение об ошибке:

Если вы делаете не какую-то единичную вставку при переносе данных, а где-то сохраните этот запрос, например в вашем PHP скрипте, то всегда перечисляйте столбцы.

Как не рекомендуется делать (без перечисления столбцов):

Если у вас со временем изменится количество столбцов в таблице, то запрос перестанет работать. При выполнении запроса MySQL в лучшем случае просто будет возвращать ошибку:

Либо еще хуже: значения вставятся не в те столбцы.

Вставка из другой таблицы с условием INSERT INTO . SELECT . WHERE .

А теперь представим, что нам нужно вставить только те строки из table1, у которых столбец «c» равен 333. Тогда наш запрос будет выглядеть так

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

Теперь представим, что у нас в таблице table2 — 4 столбца, а в table1 — 3. При этом четвертый столбец в table2 обязательный. Чтобы выйти из этой ситуации, нужно передать какое-нибудь подходящее значение в этот лишний столбец. У нас чисто абстрактная задача, поэтому давайте передадим туда просто единицу.

Теперь в столбец d у нас записалась единица и проблема решена.

Вставка в определенный раздел INSERT INTO . PARTITION .

Если вам нужно вставить строки в определенный раздел таблицы, то нужно после таблицы указать PARTITION (название раздела), например так:

Вставка в несколько разделов. Первая строка вставляется в раздел p1, а вторая в p2

Вставка строк, некоторые из которых уже существуют в целевой таблице

Существование строк определяется по значению уникальных ключей. В зависимости от ситуации мы можем выбрать разные способы поведения при совпадении значений уникальных столбцов.

Игнорирование INSERT IGNORE INTO

Например если мы вставляем строку с PK = 1, и при этом в таблице уже есть PK = 1 то MySQL выдаст ошибку:

Выполнение запроса на этом прервется, однако нам в некоторых случаях хотелось бы просто вставить данные, игнорируя ошибки. В этом нам поможет INSERT IGNORE INTO:

Просто добавляем IGNORE в наш запрос и ошибки будут игнорироваться

Вставка с заменой существующих значений REPLACE INTO

REPLACE работает также INSERT, но если совпадают уникальные ключи, то старая строка (или строки!) удаляется до вставки новой.

В таком случае наш пример выглядит следующим образом:

Обновление некоторых полей, при существовании строк ON DUPLICATE KEY UPDATE

При совпадении ключей, мы можем также заменить некоторые или все поля в строке.

Наш запрос будет выглядеть так:

В данном примере если у нас какой-то уникальный ключ совпадает, то мы не производим вставку, а обновляем существующую строку или строки путем присваивания столбцу «c» значения, которое у нас перечислено в VALUES.

Иными словами, если ключ совпадает, то мы просто обновим данные столбца «с» а остальные столбцы трогать не будем.

Иногда нам нужно при совпадении ключей обновить все значения. Этом можно сделать просто перечислив все столбцы:

При обновлении столбцов мы также можем использовать разные выражения, например:

Выражения для вставляемых значений в VALUES

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

Пример использования выражений:

Таким образом мы для формирования столбца «c» использовали столбцы «a» и «b».

Приоритет вставки INSERT LOW_PRIORITY / HIGH_PRIORITY

Установление приоритета нужно для решение проблем с конкурентными вставками. При вставках происходит блокировка строк и если 2 INSERT запроса требуют блокировки одних и тех же строк, для своего выполнения, то иногда может потребоваться повысить или понизить приоритет некоторых запросов, по отношению к другим. Это можно сделать указав приоритет LOW_PRIORITY или HIGH_PRIORITY

Наш запрос будет выглядеть так для LOW_PRIORITY:

Источник

Читайте также:  Как настроить камеру для навигатора
Оцените статью