Как запустить groupby в Oracle на таблице, имеющей тип данных Long для одного из столбцов - незаконное использование типа данных LONG - PullRequest
0 голосов
/ 25 апреля 2018
SELECT ac.owner, ac.table_name, LISTAGG(column_name ,',' ) WITHIN GROUP(ORDER BY ac.constraint_name) AS "ABC" , ac.constraint_name, ac.constraint_type, ac.search_condition
        (SELECT ac2.table_name FROM all_cons_columns ac2 WHERE AC2.CONSTRAINT_NAME = AC.R_CONSTRAINT_NAME) fK_to_table, 
        (SELECT ac2.column_name FROM all_cons_columns ac2 WHERE AC2.CONSTRAINT_NAME = AC.R_CONSTRAINT_NAME) fK_to_column 
        FROM all_cons_columns acc, all_constraints ac WHERE     acc.constraint_name = ac.constraint_name AND acc.table_name = ac.table_name 
        AND CONSTRAINT_TYPE IN ('P', 'R', 'C', 'U') group by ac.owner, ac.table_name, ac.constraint_name, ac.constraint_type, ac.search_condition;

возврат -

ORA-00997: illegal use of LONG datatype
00997. 00000 -  "illegal use of LONG datatype"
*Cause:    
*Action:

Я пробовал что нет. Любые предложения, пожалуйста?

Примечание - 1. Изменение типа данных таблицы не допускается. 2. Кажется, что ac.search_condition имеет тип Long 3. Обязательно нуждается в ac.search_condition в запросе

1 Ответ

0 голосов
/ 25 апреля 2018

есть столбец search_condition_vc, попробуйте вместо этого varchar2

- это любые из ваших условий поиска> 4000 символов, если это так, это может вызвать проблему, но, вероятно, вы можете выяснить это

как только я сделал это, он выдал ошибку в группе, пропустив, поэтому этот новый sql имеет r_constraint_name в группе на

SELECT ac.owner, ac.table_name, LISTAGG(column_name ,',' ) WITHIN GROUP(ORDER BY ac.constraint_name) AS "ABC" , ac.constraint_name, ac.constraint_type, ac.search_condition_vc,
        (SELECT ac2.table_name FROM all_cons_columns ac2 WHERE AC2.CONSTRAINT_NAME = AC.R_CONSTRAINT_NAME) fK_to_table, 
        (SELECT ac2.column_name FROM all_cons_columns ac2 WHERE AC2.CONSTRAINT_NAME = AC.R_CONSTRAINT_NAME) fK_to_column 
        FROM all_cons_columns acc, all_constraints ac WHERE     acc.constraint_name = ac.constraint_name AND acc.table_name = ac.table_name 
        AND CONSTRAINT_TYPE IN ('P', 'R', 'C', 'U') group by ac.owner, ac.table_name, ac.constraint_name, ac.constraint_type, ac.search_condition_vc, ac.r_constraint_name;
...