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

Как да стартирате Create Table DDL с EXECUTE IMMEDIATE в Oracle Database

Създаване на таблица DDL с изпълнение незабавно

Сигурно си мислите, че какъв може да е проблемът при изпълнението на CREATE TABLE DDL? Добре, няма проблеми, стига да ги изпълнявате с SQL. Но когато става въпрос за изпълнението им с PL/SQL, това е доста трудно.

И така, първо, какво представляват DDL изразите в Oracle Database?

DDL означава език за дефиниране на данни. С помощта на DDL изрази можем да създаваме или модифицираме обектите на базата данни, както и схемите. Тези твърдения са:

  • СЪЗДАВАЙТЕ,
  • ИЗПУСКАНЕ и
  • ПРОМЕНЯ.

Винаги е добра практика да подредите своите схеми и обекти предварително и да ги създадете в началния етап на вашия проект. Ако е възможно, трябва да направим тази работа с SQL. Това може да бъде много по-бързо и по-чисто. Но понякога това не винаги е възможно, в тази ситуация можем да се възползваме от функции като Native Dynamic SQL в Oracle Database.

Native Dynamic SQL ни позволява да изпълняваме SQL изрази като DDL или DML направо чрез нашия PL/SQL.

Защо не можем да изпълним DDL чрез програма PL/SQL?

Ако все още се чудите дали изпълнението на DDL оператор с PL/SQL е толкова сложно, тогава нека опитаме да създадем таблица чрез PL/SQL програма.

SET SERVEROUTPUT ON;
BEGIN 
    CREATE TABLE tut_82 (
    tut_num NUMBER(3),
    tut_name   VARCHAR2 (50));  
END;
/

Знам, че този подход щеше да е първата ви мисъл, ако ви бях помолил да създадете таблица чрез PL/SQL програма. Искам да кажа, това изглежда перфектно, какво би могло да се обърка?

Няма нищо лошо в тази програма, единственият проблем тук е, че PL/SQL не поддържа директно DDL изрази. За да изпълним DDL израз с помощта на PL/SQL, ние трябва или да използваме помощта на пакета DBMS_SQL или усъвършенствания и подобрен начин на NATIVE DYNAMIC SQL.

Можете да проверите това сами. Продължете и изпълнете горната програма. При изпълнение ще получите грешка, която изглежда нещо като тази, показана на снимката по-долу.

И така, какъв е правилният начин за изпълнение на DDL чрез PL/SQL програма?

Можете да изпълните DDL чрез PL/SQL програма или като използвате пакета DBMS_SQL, или като използвате оператора Execute Immediate на Native Dynamic SQL. Последният вариант е най-използваният, особено в днешно време поради по-добрата си производителност и лесен за научаване синтаксис.

Как да изпълним CREATE TABLE DDL с помощта на Execute Immediate в Oracle Database?

Стъпка 1:Подгответе своя DDL предварително.

Въпреки че не е необходимо, но ви предлагам да подготвите своя DDL предварително, по този начин можете поне да елиминирате шансовете за получаване на синтактична грешка поради синтаксиса на вашия DDL израз.

В нашия случай искаме да изпълним CREATE TABLE DDL, така че нека първо напишем DDL за създаване на таблица.

CREATE TABLE tut_82 (
    tut_num    NUMBER (3),
    tut_name   VARCHAR2 (50)
) 

Този DDL израз ще създаде таблица с име tut_82 с две колони tut_num от NUMBER тип данни и tut_name от тип данни VARCHAR2.

Имайте предвид, не завършвайте своя SQL израз (този, който искате да стартирате с EXECUTE IMMEDIATE) с точка и запетая.

Стъпка 2:Стартирайте своя DDL чрез PL/SQL програма, като използвате Execute Immediate.

След като подготвите своя DDL, трябва да напишете вашата PL/SQL програма.

SET SERVEROUTPUT ON;
DECLARE
    ddl_qry     VARCHAR2 (150);
BEGIN
    ddl_qry := 'CREATE TABLE tut_82(
                tut_num     NUMBER(3),
                tut_name    VARCHAR2(50)
                )';
    EXECUTE IMMEDIATE ddl_qry;
END;
/

В горния PL/SQL блок декларирахме променлива с името ddl_qry. Използвахме тази променлива за съхраняване на нашия DDL оператор, който подготвихме в стъпка 1.

Информация:
Едно нещо, което трябва да се уверите тук, е, че променливата, която ще използвате за задържане на SQL израза, който искате да изпълните с вашия оператор EXECUTE IMMEDIATE винаги трябва да бъде от тип данни VARCHAR2 и имат много ширина на данните така че вашият DDL да може лесно да се побере в него.

В секцията за изпълнение на този PL/SQL блок имаме два изпълними оператора. Тези твърдения са:

Изявление 1:Изявление за присвояване

В първия израз сме съхранили нашия Създаване на таблица DDL в променливата ddl_qry, използвайки оператора за присвояване (в PL/SQL операторът за присвояване е комбинация от двоеточия и е равно на знак).

Изявление 2:The Mighty Execute Immediate statement

Вторият оператор е изявлението за изпълнение. За да изпълните динамично DDL, първо трябва да напишете запазената фраза „Изпълни незабавно“, последвана от името на променливата, в която сте съхранили своя DDL, както направихме по-горе.

Ако искате, можете също да напишете своя DDL директно след фразата „Резервирана фраза“. Това е изцяло личен избор. Обичам да използвам предишния подход, при който използваме променлива за задържане на DDL, защото на първо място това прави кода ви да изглежда спретнат и чист, освен това прави проследяването на грешките много по-лесно.

Но Маниш, искам да науча и другия начин на писане на DDL изявлението.

Разбира се, няма нищо лошо да научите нещо ново.

BEGIN
    EXECUTE IMMEDIATE 'CREATE TABLE tut_82(
                	tut_num     NUMBER(3),
                	tut_name    VARCHAR2(50)
                )';
END;
/

Алтернативният подход към горния код е да напишете DDL инструкцията направо във вашия оператор Execute Immediate. За това просто трябва първо да напишете запазената фраза Execute Immediate, последвана от DDL оператора, който искате да изпълните динамично.

По всеки от начините просто трябва да се погрижите за няколко неща, докато пишете DDL за Execute Immediate.

Първо:Винаги включвайте своя SQL израз в двойка единични кавички

Винаги помнете, че Execute Immediate третира DDL или DML или всякакви други поддържани SQL изрази, които искате да изпълнявате динамично като низ от тип данни VARCHAR2 а в PL/SQL затваряме всеки знак или низ VARCHAR2 в двойка единични кавички. По този начин винаги се уверете, че сте поставили своя SQL израз, който искате да изпълните с помощта на Execute Immediate, в двойка единични кавички.

Второ:Погрижете се за точката и запетаята.

В случай, че пишете SQL израз за Execute Immediate, тогава трябва да поставите точката и запетаята (;) точно извън единичните кавички, в които сте поставили своя SQL израз. От друга страна, ако пишете PL/SQL блок за динамично изпълнение с помощта на Execute Immediate, тогава трябва да поставите точката и запетаята в края на вашия PL/SQL блок точно преди затварящите единични кавички, както и точно извън затварящите единични кавички.

Това е подробният урок за това как да стартирате DDL оператор Create Table, използвайки оператор EXECUTE IMMEDIATE на Native Dynamic SQL в Oracle Database. Надяваме се, че ви е харесало и сте научили нещо ново.

Моля, не забравяйте да се абонирате за моя канал в YouTube, тъй като в следващия урок ще научим нещо ново и интересно за Dynamic SQL. Можете също да ме последвате в моя Twitter и Facebook.

Благодаря и приятен ден!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Рекурсия в Oracle

  2. Как да експортирате резултатите от заявката в CSV файл в SQLcl (Oracle)

  3. SQL:Вземете записи, създадени във времеви диапазон за конкретни дати

  4. Преобразувайте новия ред в XML в Oracle Trigger

  5. Пивот в Oracle 11g