Как также выбрать количество строк из следующего запроса? - Oracle SQL - PullRequest
0 голосов
/ 26 февраля 2020

Необходимо также выбрать количество строк / записей, используя следующий запрос в Oracle SQL. Как бы я go об этом?

SELECT DISTINCT t.OWNER AS TABLE_SCHEMA, t.Table_Name, c.COLUMN_NAME, c.DATA_TYPE, 
                ( 
                    SELECT CASE WHEN cons.CONSTRAINT_TYPE = 'P' THEN 'Primary Key' ELSE NULL END 
                    FROM SYS.all_cons_columns cols 
                        INNER JOIN SYS.all_constraints cons ON cons.constraint_name=cols.constraint_name AND cons.constraint_type = 'P' 
                    WHERE cols.Column_name=c.column_name AND cols.TABLE_NAME=c.TABLE_NAME AND cols.OWNER=c.OWNER 
                ) AS CONSTRAINT_TYPE, c.DATA_PRECISION, c.DATA_SCALE 
                FROM SYS.ALL_TABLES t 
                    INNER JOIN SYS.all_tab_columns c ON c.TABLE_NAME=t.TABLE_NAME AND c.OWNER=t.OWNER
                WHERE t.OWNER = 'MY_SCHEMA_NAME' AND t.Table_Name = 'MY_TABLE_NAME'

Ответы [ 3 ]

1 голос
/ 26 февраля 2020

Если вы можете жить с оценочным числом строк (точность которого зависит от актуальности статистики каждой таблицы), вы можете просто использовать столбец NUM_ROWS из ALL_TABLES:

SELECT 
    t.OWNER AS TABLE_SCHEMA, 
    t.Table_Name, 
    c.COLUMN_NAME, 
    c.DATA_TYPE, 
    t.NUM_ROWS, --> here
    ...
FROM all_tables t
INNER JOIN all_tab_columns c ...

Обратите внимание, что DISTINCT здесь кажется излишним - ваш запрос генерирует одну запись на столбец таблицы.

Если вам действительно нужен точный счет, то вы можете использовать встроенный запрос - но вам нужно жестко закодировать имя таблицы:

SELECT 
    t.OWNER AS TABLE_SCHEMA, 
    t.Table_Name, 
    c.COLUMN_NAME, 
    c.DATA_TYPE, 
    (SELECT COUNT(*) FROM my_schema_name.my_table_name) no_rows,
    ...
FROM all_tables t
INNER JOIN all_tab_columns c ...
WHERE t.OWNER = 'MY_SCHEMA_NAME' AND t.Table_Name = 'MY_TABLE_NAME'
0 голосов
/ 26 февраля 2020

https://www.oracletutorial.com/oracle-basics/oracle-private-temporary-table/ ссылка

INSERT INTO ora$ppt_temp_table_count(ADD ALL COLUMNS HERE 
COMMASEPARATED)
SELECT col1, col2, col3
FROM source_table
WHERE condition; <-- your query

SELECT COUNT(*) FROM ora$ppt_temp_table_count;
0 голосов
/ 26 февраля 2020

Не уверен, какой SQL вы используете, но вы можете поместить весь результат во временную таблицу, например

INTO temp temp_table_count WITH NO LOG;

SELECT COUNT(*) FROM temp_table_count;
...