Ошибка SQL в Invantive Control для Excel

#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. Ответ на удаленный следующий вопрос на самом деле лучший. С помощью этого синтаксиса я получаю хорошие результаты.