#sql #exact-online #invantive-control #invantive-sql
#sql #точный-онлайн #invantive-control #изобретательный-sql
Вопрос:
Это для Invantive Control для Excel.
Что может быть причиной ошибки при втором СОЗДАНИИ ТАБЛИЦЫ?
CREATE TABLE niveau1@inmemorystorage
AS
SELECT ID
, Code
, AddressLine1
, Name
, Parent
FROM Accounts
WHERE ID=$P{P_ACCOUNTID}
CREATE TABLE niveau2@inmemorystorage
AS
SELECT ID
, Code
, AddressLine1
, Name
, Parent
FROM Accounts
WHERE Parent IN (SELECT ID FROM niveau1@inmemorystorage)
CREATE TABLE niveau3@inmemorystorage
AS
SELECT ID
, Code
, AddressLine1
, Name
, Parent
FROM Accounts
WHERE Parent IN (SELECT ID FROM niveau2@inmemorystorage)
SELECT * FROM niveau1@inmemorystorage
UNION ALL
SELECT * FROM niveau2@inmemorystorage
UNION ALL
SELECT * FROM niveau3@inmemorystorage
Комментарии:
1. Привет, добро пожаловать в SO. Похоже, это ваши первые вопросы. Я предлагаю вам ознакомиться с рекомендациями SO по форматированию вопроса. Всегда заключайте свой код в тег wrap . я сделал это для тебя, приятель. Счастливого кодирования!
2. Какое сообщение об ошибке вы получаете?
3. Пожалуйста, обратите внимание, что конструкция
where ... in ( select ... )
в настоящее время вызывает вычисление части после IN в каждой строке from . Invantive SQL в настоящее время не делает различий между коррелированными и некоррелированными подзапросами. По соображениям производительности вы можете переписать его в join вместо in () .4. Сообщение об ошибке: Синтаксическая ошибка в строке 11, столбец 0 «СОЗДАТЬ»: несоответствующий ввод «СОЗДАТЬ», ожидающий {<EOF>, ‘*’, GROUP, INTERSECT, MINUS_C, ORDER, UNION, AND, ИЛИ, ‘-‘, ‘ ‘, ‘/’, КОНКАТ_ОП}
5. @LeoH Ошибка «Синтаксическая ошибка в строке 11» с «create» сигнализирует о том, что вы отправили как create table niveau1, так и niveau2 в механизм SQL одним пакетом. Вы можете выполнять пакетные инструкции SQL, но вам нужно разделить с помощью ‘;’ вместо пробелов. Или удалите пробелы между двумя операторами create table . Это исправит это для вас?
Ответ №1:
Вероятно, вы получили сообщение об ошибке: «Идентификатор «Учетные записи» неоднозначен.». Вы можете добавить идентификатор там, где это необходимо.
Рабочий SQL для точных онлайн-учетных записей показан ниже. Пожалуйста, обратите внимание на использование create or replace table
вместо create table
, привилегии не меняются (когда они есть), но при необходимости таблица удаляется первой.
CREATE OR REPLACE TABLE niveau1@inmemorystorage
AS
SELECT act.ID
, act.Code
, act.AddressLine1
, act.Name
, act.Parent
FROM exactonlinerest..Accounts act
CREATE OR REPLACE TABLE niveau2@inmemorystorage
AS
SELECT act.ID
, act.Code
, act.AddressLine1
, act.Name
, act.Parent
FROM exactonlinerest..Accounts act
join niveau1@inmemorystorage n1
on n1.id = act.Parent
CREATE OR REPLACE TABLE niveau3@inmemorystorage
AS
SELECT act.ID
, act.Code
, act.AddressLine1
, act.Name
, act.Parent
FROM exactonlinerest..Accounts act
join niveau2@inmemorystorage n2
on n2.id = act.Parent
SELECT * FROM niveau1@inmemorystorage
UNION ALL
SELECT * FROM niveau2@inmemorystorage
UNION ALL
SELECT * FROM niveau3@inmemorystorage
Комментарии:
1. Ответ на удаленный следующий вопрос на самом деле лучший. С помощью этого синтаксиса я получаю хорошие результаты.