Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Operand should contain 1 column

Где ошибка? Структура полностью соответствует
INSERT INTO reports_template(group_parent,groupid,torep,KODnom,NAIM,All0,All1,ud0,ud1,raz0,raz1,otk0,otk1,view0,view1) 
SELECT(select kodvopr.group_parent AS group_parent,
kodvopr.groupid AS groupid,
kodvopr.torep AS torep,
kodvopr.KODnom AS KODnom,
kodvopr.NAIM as NAIM,
 sum(case when (datecreate between '2018-01-01' AND '2018-10-09') then 1 else 0 end) AS All0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') then 1 else 0 end) AS All1,
 sum(case when (datecreate between '2018-01-01' AND '2018-10-09') AND (resultview = 'УДОВЛЕТВОРЕНО') then 1 else 0 end) AS ud0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') AND (resultview = 'УДОВЛЕТВОРЕНО') then 1 else 0 end) As ud1,
 sum(case when (datecreate between '2018-01-01' AND '2018-10-09') AND (resultview = 'РАЗЪЯСНЕНО') then 1 else 0 end) AS raz0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') AND (resultview = 'РАЗЪЯСНЕНО') then 1 else 0 end) As raz1,
 sum(case when (datecreate between '2018-01-01' AND '2018-10-09') AND (resultview = 'ОТКАЗАHО') then 1 else 0 end) As otk0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') AND (resultview = 'ОТКАЗАHО') then 1 else 0 end) AS otk1, 
sum(case when (datecreate between '2018-01-01' AND '2018-10-09') AND (control=1) AND (resultview='')  then 1 else 0 end)AS view0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') AND (control=1) AND (resultview='') then 1 else 0 end) AS view1
From kodvopr 
LEFT JOIN register ON kodvopr.KODnom = register.themeid
 group by KODnom ORDER BY kodvopr.KOD11,kodvopr.groupid)
Ответ: Прям беда со вставками картинок...

1.

2.
Вопрос: Vertica 7.1.1 Column- Constraint: UNIQUE (ну и PRIMARY KEY за компанию)

Начинаю потихоньку разбираться с особенностями сабжа.

1. Читаю про UNIQUE:
Constrains the data that a column (or group of columns) contains to be unique with respect to all the rows in the table. If you insert or update the column with a duplicate value, HP Vertica does not give an error.

2. С PRIMARY KEY такая же беда: несмотря на отсутствие в pdf страницей выше аналогичного упоминания про does not give an error - два подряд insert-а с одним id отлично залетают в таблицу и тащатся select-ом.

Зачем тогда данные типы constraints вообще поддерживаются?

Ради упрощения можно допустить, что данные летят из нескольких независимых источников, но только на одну ноду.

Существует ли способ блокировать вставку (по нарушению PRIMARY KEY или UNIQUE) и обновление (по нарушению UNIQUE) неуникальных записей?
Ответ:
Сергей Васкецов
Однако чтобы было понятнее: есть некий "справочник", который настолько прост, что может формироваться автоматически (и на который ссылается основная часть данных). И вот на разных источниках эти данные могут дублироваться по первичному ключу и дополнительному уникальному индексу, с частичным заполнением прочих полей в записи (по-разному на разных источниках), соответственно, крайне удобно было бы просто сливать MERGE-ем такую мелочь (нет - вставилось, есть - обновилось в части тех полей, где NULL). Без предварительной и пост- обработки.

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

MERGE конечно тоже никто делать не запрещает, делаете буферную табличку, в нее заливаете справочник, потом мержите с основной. Но учтите, UPDATE/DELETE/MERGE накладывают эклюзивную блокировку на таблицу, пока коммит не пройдет, ни какая другая сессия изменить данные в таблице не сможет, только вставлять новые. Ну и так же разные нюансы, когда в кластере рекаверится нода, идет ребалансировка кластера и т.д. - тоже X/U блокировки будут здорово мешаться, если они часто будут идти - в итоге просто придется останавливать изменения, пока эти операции не пройдут.

Сергей Васкецов
А на тему множества DML и загаживания памяти - там вроде как есть возможность писать напрямую на диск, если немного и осторожно.

Я именно про диск и говорю. Почитайте архитектуру Вертики по хранению данных в ROS контейнерах. Именно для этого WOS и сделан, чтобы оптимизировать работу часто пишущих но коротких сессий, но он на вставках хорошо работать будет, а на изменениях данных выплывут нюансы :)
Вопрос: Не изменяется процедура с type of column

ошибка "This operation is not defined for system tables. unsuccessful metadata update. cannot delete. DOMAIN RDB$899.". В тексте процедуры никаких доменов нет. Путем тыканья, выяснилось, что ошибку вызывают объявления возвращаемых значений описанные как type of column СоотвТаблица.СоотвПоле. Эти поля в таблице объявлены как varchar с соответствующими размерами. Это баг FB или эксперта? Потому что процедуры меняли неоднократно и всегда все было нормально.
WI-V2.5.2.26539
Ответ:
Мимопроходящий
минимальный скрипт для воспроизведения баги накалякай.

да там и калякать то нечего

было:

create or alter procedure ASP_GET_CARINFO (
    D_ID integer)
returns (
    MODEL varchar(30),
    RELDATE char(16),
    REGNUM char(14),
    PAWNED smallint)
as
begin
  
  for select c.model,
             c.reldate,
             c.regnum,
             c.pawned
      from CLIENTS d
      left join cars c on d.id=c.clientid
      where d.id=:d_id
      into
           :model,
           :reldate,
           :regnum,
           :pawned
  do
  begin
    suspend;
  end
end


вот cars:
CREATE TABLE CARS (
    ID        INTEGER NOT NULL,
    CLIENTID INTEGER,
    MODEL     VARCHAR(30),
    RELDATE   CHAR(16),
    REGNUM    CHAR(14),
    PAWNED    SMALLINT
);


В процедуре поменял char на type of column и появилась эта ошибка (на обоих char). Другие типы данных такой проблемы не имеют. Поменять char на varchar разумеется без проблем, но таких ошибок на скрипте обновления базы вывалилось больше десятка и копаться дальше не стал.
Вопрос: Operand data type float is invalid for modulo operator

Здравствуйте.Operand data type float is invalid for modulo operator что это значит и как исправить?
Ответ: сами почитайте:
Вопрос: 00984. 00000 - "column not allowed here"

Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE OR REPLACE PROCEDURE N_temp(major VARCHAR2) IS 
  v_v1 VARCHAR2(50);
  v_v2 VARCHAR2(50);
  CURSOR MY_C IS (SELECT first_name,SECOND_NAME FROM table1 WHERE profession = major);
  BEGIN 
    EXECUTE IMMEDIATE 'DROP TABLE temp';
  EXCEPTION
      WHEN OTHERS THEN 
        IF SQLCODE !=-942 THEN
          RAISE;
        END IF;
    EXECUTE IMMEDIATE 'CREATE TABLE temp (First_name varchar2(20),Second_name varchar2(20))';
    
    OPEN MY_C;
    LOOP
    FETCH MY_C INTO v_v1,v_v2;
    EXIT WHEN MY_C%notfound;
      dbms_output.put_line(v_v1);
      EXECUTE IMMEDIATE 'insert into temp values (v_v1,v_v2)';
    END LOOP;
    CLOSE MY_C;
  END N_temp;
PL/SQL procedure successfully completed.

Error starting at line : 2 in command -
EXECUTE N_TEMP('Oracle')
Error report -
ORA-00984: column not allowed here
ORA-06512: at "MYBASE.N_TEMP", line 20
ORA-00942: table or view does not exist
ORA-06512: at line 1
00984. 00000 - "column not allowed here"
*Cause:
*Action:

Не могу понять в чем дело тут
Ответ: Все мы когда-то делали подобные ошибки.
Я сперва писал
SQL
1
EXECUTE IMMEDIATE 'insert into temp values ('''||v_v1||''','''||v_v2||''')';
, а потом немного подучился и стал писать
SQL
1
EXECUTE IMMEDIATE 'insert into temp values (:v1,:v2)'   USING v_v1, v_v2;
. По-моему как-то так
Вопрос: 0 rows update when that should have been 1

Используется
HeidiSQL.
MySql 5,7 х64

При добавлении(обновлении) записи в поле TINYINT (или INT).
Добавляются числа: 100, 150..

Появляется ошибка "0 rows update when that should have been 1"

Таблица
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE `tst_001_tb_00` (
    `id` INT(11) NOT NULL,
    `pl_1_txt` TEXT NULL,
    `update_pl_2` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `pl_2_enum` ENUM('Y','N') NULL DEFAULT NULL,
    `update_pl_3` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `pl_3_txt` TEXT NULL,
    `TINYINT` TINYINT(10) NULL DEFAULT NULL,
    `INT` INT(11) NULL DEFAULT NULL,
    INDEX `id` (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
Вопрос.
В чём проблема?
Ответ: Целые типы данных могут быть объявлены положительными. Для этого после объявления необходимо использовать ключевое слово UNSIGNED. В таком случае элементам столбца нельзя будет присвоить отрицательные значения, а допустимый диапазон положительных чисел которые может принимать элемент, удваивается. Например: TINYINT принимает от -128 до 127, а TINYINT UNSIGNED — от 0 до 255. Следовательно значение 150 в вашем случае ввести не удастся.
Я ввел значение 100 в поле ID и в поле TINYINT. У меня все хорошо.

"0 rows update when that should have been 1"
Это не ошибка. Об этом можете почитать тут ( или )
Вопрос: Ошибка 1054 Unknown column 'column_name' in 'where clause'

Всем привет!

Прошу помощи, так как сам имею очень скромные познания в MySQL.

Суть вопроса в следующем: есть запрос
"SELECT *,
						ma.attribute_type as 'ma.attribute_type',
						ma.enabled as 'ma.enabled',
						(SELECT attribute_group_id FROM " . DB_PREFIX . "attribute WHERE attribute_id = (SELECT attribute_id FROM  " . DB_PREFIX . "ms_attribute WHERE ms_attribute_id = " . (int)$attribute_id . ")) as attribute_group_id
				FROM " . DB_PREFIX . "ms_attribute ma
				LEFT JOIN " . DB_PREFIX . "ms_attribute_description mad
					ON (ma.attribute_id = mad.attribute_id)
				WHERE ma.attribute_id = " . (int)$attribute_id . "
				AND mad.language_id = '" . (int)$this->config->get('config_language_id') . "'";


выдает ошибку:
Notice: Error: Unknown column 'ms_attribute_id' in 'where clause'
Error No: 1054
SELECT *, ma.attribute_type as 'ma.attribute_type', ma.enabled as 'ma.enabled', (SELECT attribute_group_id FROM oc_attribute WHERE attribute_id = (SELECT attribute_id FROM oc_ms_attribute WHERE ms_attribute_id = 2)) as attribute_group_id FROM oc_ms_attribute ma LEFT JOIN oc_ms_attribute_description mad ON (ma.attribute_id = mad.attribute_id) WHERE ma.attribute_id = 2 AND mad.language_id = '1' in /site_path/system/library/db/mysqli.php on line 41Notice: Trying to get property of non-object in /site_path/system/library/msattribute.php on line 204Notice: Undefined index: attribute_type in /site_path/public_html/admin/controller/multiseller/attribute.php on line 142

Попытки разобраться самостоятельно приводят к фрустрации от непонимания вообще за что взяться.
Ответ: Donotstop,
начни со второго подзапроса
SELECT attribute_id FROM  " . DB_PREFIX . "ms_attribute WHERE ms_attribute_id = " . (int)$attribute_id
Вопрос: create table .... type of column tttt.ffff

При объявлении процедур можно указывать тип параметров по уже существующим столбцам.

А для обычных таблиц такое сделали? create table .... type of column tttt.ffff

Вот пример, хочу в ряд таблиц добавить поле, копируемое треггиром с current_connection.

Но у current_connection (и у mon$attachments.MON$attachment_id) нет именнованного домена - что весьма жаль, правильнее бы, чтобы был явно названный тип, так и вопрос бы решился, но увы...

При этом в FB2 и FB3+ тип переменной/поля разный.

Можно бы было добиться того же даже в отсутствие явно прописанного типа данных
alter table add cxn type of column mon$attachments.MON$attachment_id
или
alter table add cxn type of variable current_connection
- но вроде по докам этого даже в FB3 нету.
Ответ: Arioch,

ИХМО computed by столбцы зло. Хорош фигню сочинять
Вопрос: Как выбрать "Key column" в "Mining Structure" для Microsoft Analysis Services?

Добрый день!
Имеется таблица поступлений товаров на склад:
Ключ транзакции (Код поступления товара),
Код товара,
Стоимость поставки,
Стоимость продажи.

В Microsoft Analysis Services пытаюсь построить зависимость "Стоимость продажи" от других параметров. Вопрос: Для создания "Mining Structure" Key Column – это Код товара или Код Транзакции?
Ответ: Уникальное поле -- если Код Транзакции уникален то он. Если нет, то придётся делать суррогатных ключ
Вопрос: alter column -изменение типа в связанных таблицах

Доброго всем дня!

Подскажите пожалуйста, мне нужно в таблице изменить тип поля с int на bigint

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

ALTER TABLE T114 alter column id_nmTamplate bigint NOT NULL

но проблема в том что это поле связано ещё с тремя таблицами, поэтому
все мои попытки заканчиваются неудачно.
Подскажите пожалуйста, что нужно дописать чтобы поменять тип поля сразу во всех таблицах.
Ответ:
saley
А нельзя ли изменить сразу во всех таблицах одной командой?
Увы, нельзя.