如何 运行 在 oracle 中对其列之一具有 Long 作为数据类型的 table groupby - 非法使用 LONG 数据类型
How to run groupby in oracle on a table having Long as datatype for one of its column - illegal use of LONG datatype
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;
returns -
ORA-00997: illegal use of LONG datatype
00997. 00000 - "illegal use of LONG datatype"
*Cause:
*Action:
我试过了,不行。有什么建议吗?
注意 - 1. 无法更改 table 数据类型。
2. ac.search_condition 好像是Long类型
3.查询中肯定需要ac.search_condition
有一个 search_condition_vc 列,试试看,它是一个 varchar2
您的搜索条件是否超过 4000 个字符,如果是这样可能会导致问题,但您或许可以解决
一旦我这样做了,它就通过 missing 在组上给出了一个错误,所以这个新的 sql 在组 by
中有 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;
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;
returns -
ORA-00997: illegal use of LONG datatype
00997. 00000 - "illegal use of LONG datatype"
*Cause:
*Action:
我试过了,不行。有什么建议吗?
注意 - 1. 无法更改 table 数据类型。 2. ac.search_condition 好像是Long类型 3.查询中肯定需要ac.search_condition
有一个 search_condition_vc 列,试试看,它是一个 varchar2
您的搜索条件是否超过 4000 个字符,如果是这样可能会导致问题,但您或许可以解决
一旦我这样做了,它就通过 missing 在组上给出了一个错误,所以这个新的 sql 在组 by
中有 r_constraint_nameSELECT 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;