PL \ SQL - получить количество всех таблиц в схеме - ошибки - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу получить результат: имя таблицы, количество для каждой таблицы из AS_TABLE_LIST.

create procedure AtRowCount
as
declare
TableCount NUMBER(1);
TableName VARCHAR2(100);
BEGIN
SelectQuery1:= 'SELECT count(*) FROM ' || TableName || ' INTO ' ||             TableCount;
FOR TableName IN (select table_name from AS_TABLE_LIST) 
LOOP
EXECUTE IMMEDIATE SelectQuery1;
END LOOP;
select TableName, TableCount into AT_ROW_COUNT from dual;
END AtRowCount;

Я получаю две ошибки:

[Ошибка] PLS-00306 (7: 19): PLS-00306: неправильный номер или типы аргументы в вызове '||'

[Ошибка] ORA-00904 (9: 8): PL / SQL: ORA-00904: «TABLENAME»: недействительно Идентификатор

Я много раз пытался это исправить, но все равно появлялись те же ошибки. любой совет?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Надеюсь, это сработает для вас

            CREATE PROCEDURE atrowcount
            IS 
             selectquery1 VARCHAR2(2000);
             tablecount NUMBER;
            BEGIN
                selectquery1:= 'SELECT count(1) FROM :TableName';
               FOR i IN (select table_name from AS_TABLE_LIST) 
               LOOP
                   EXECUTE IMMEDIATE selectquery1 INTO tablecount USING i.table_name;
                   INSERT INTO table_list VALUES(i.table_name,TableCount);
               END LOOP;
               COMMIT;
            END AtRowCount;
0 голосов
/ 12 сентября 2018

Я не совсем уверен, что вы пытаетесь сделать, но это может быть следующим:

CREATE PROCEDURE AtRowCount AS
DECLARE
  l_count NUMBER;
BEGIN
  FOR c IN (SELECT table_name from AS_TABLE_LIST) LOOP
    EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM '||c.table_name INTO l_count;
    INSERT INTO AT_ROW_COUNT(TableName, TableCount )
    VALUES (c.table_name, l_count);
  END LOOP;
END AtRowCount; 

Если вы хотите, чтобы ваша процедура возвращала список, а не вставляла результат в новую таблицу, вы должны вместо этого использовать конвейерную функцию (см. https://oracle -base.com / article / misc / pipelined -table-functions для примера того, как его использовать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...