Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle:Динамичен SQL

Ето прост пример, който разглежда таблици във вашата собствена схема:

set serveroutput on
declare
    c number;
begin
    for r in (select table_name from user_tables) loop
        execute immediate 'select count(*) from ' || r.table_name
            into c;
        dbms_output.put_line(r.table_name ||': '|| c);
    end loop;
end;
/

За да разгледате нечии други таблици, ще трябва да използвате dba_tables както започнахте да опитвате, или по-вероятно all_tables тъй като това трябва да изключи таблици, от които не можете да броите, но също така ще трябва да посочите собственика в count изявление.

Обикновено бихте искали да използвате свързващи променливи, за да избегнете SQL инжектиране, но трябва да посочите имена на обекти с конкатенация като тази.

Нещо друго, за което трябва да внимавате, е грешка, която сте имали в заявката си, но която Егор вече е премахнал от въпроса. Динамичният SQL низ, който изпълнявате, не трябва да завършва с точка и запетая (; ).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да отпечатам цялата таблица с помощта на анонимен блок в pl sql?

  2. давайки правилно потребителско име и парола, вземете ORA-01017:невалидно потребителско име/парола; влизане е отказано

  3. Заявка за намиране на средно претеглена цена

  4. Изберете N-ти ред от таблица в Oracle

  5. Не може да се изпълни динамична заявка в съхранена процедура, докато се избира брой записи