Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Администрирование Oracle Database:
- Установка и настройка базы данных
- Обновление, применение патчей
- Оптимизация, настройка производительности
- Обучение, подготовка персонала, оптимизация
  • Страница:
  • 1

ТЕМА:

Oracle: Динамическое формирование запроса 29 авг 2011 05:05 #3514

  • Klond
  • Klond аватар Автор темы
  • Не в сети
  • Новичок
  • Новичок
  • Сообщений: 50
  • Спасибо получено: 0
Динамическое формирование запроса

Спецы, подскажите как динамически подставить имя таблицы в запрос.
Нижележащий код не работает.

DECLARE
sql_str VARCHAR2(200);
CURSOR cur_ut IS SELECT table_name FROM user_tables;
c INTEGER;
rows_processed INTEGER;
kol_rec INTEGER;
BEGIN
c := DBMS_SQL.OPEN_CURSOR;
FOR qq IN cur_ut LOOP
sql_str := 'SELECT COUNT(*) INTO kol_rec FROM ' || qq.table_name;
DBMS_SQL.PARSE( c, sql_str, dbms_sql.native );
rows_processed := dbms_sql.execute(c);
END LOOP;
DBMS_SQL.close_cursor(c);
END;

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Динамическое формирование запроса 29 авг 2011 05:06 #3515

DECLARE

ln_cnt integer;

BEGIN

for rc in (SELECT table_name FROM user_tables) loop

execute immediate 'begin SELECT COUNT(*) INTO :ln_cnt FROM '||rc.table_name ||';end;' using out ln_cnt;

dbms_output.put_line(rc.table_name||' = '||ln_cnt);

end loop;

END;

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Динамическое формирование запроса 29 авг 2011 05:07 #3516

  • Klond
  • Klond аватар Автор темы
  • Не в сети
  • Новичок
  • Новичок
  • Сообщений: 50
  • Спасибо получено: 0
DECLARE

  ln_cnt integer;

BEGIN

  for rc in (SELECT table_name FROM user_tables) loop

    execute immediate 'begin SELECT COUNT(*) INTO :ln_cnt FROM '||rc.table_name 

    dbms_output.put_line(rc.table_name||' = '||ln_cnt);

  end loop;

  commit;

END;

ORA-06552: PL/SQL: Compilation unit analysis terminated

ORA-06553: PLS-320: the declaration of the type of this expression is incomplete

ORA-06512: at line 5

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Динамическое формирование запроса 29 авг 2011 05:08 #3517

фигня какая-то :(
как говорят программеры пользователям: "у нас все работает..."
версия оракла 8.1.7

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Динамическое формирование запроса 29 авг 2011 05:09 #3518

Вот рабочая :
DECLARE

  ln_cnt integer;

BEGIN

	for rc in (SELECT table_name FROM user_tables) loop

		execute immediate 'begin SELECT COUNT(*) INTO :ln_cnt FROM '||rc.table_name || '; end;'

		  using out ln_cnt;

-- 		execute immediate %af_src_str_2 || rc.table_name


-- 		   into ln_cnt;


	    dbms_output.put_line(rc.table_name||' = '||ln_cnt);

	end loop;

	commit;

exception

when others then dbms_output.put_line('ERR: ' || SQLERRM);

END;

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1