използване на използване на EXECUTE IMMEDIATE за DML израз в съхранена процедура

Аз съм нов в PL SQL процедурите, имаме този ред код в раздела за изпълнение на съхранена процедура.

Имам запитване тук, моля, кажете ми каква е ползата от използването на EXECUTE IMMEDIATE за DML израз тук? и в какви случаи трябва да използваме EXECUTE IMMEDIATE?

v_update_query2 := 'INSERT INTO '||p_country||'.DETAILS ( ID, STATUS, DEST_SYSTEM, OUT_TIME ) VALUES ('''
    ||v_txn_id ||''','||'''T081'''||','||'''CLEARING'''||', SYSDATE)';



EXECUTE IMMEDIATE v_update_query1 ;

person Community    schedule 24.07.2011    source източник


Отговори (1)


EXECUTE IMMEDIATE е единственият начин да имате препратки към променливи към обекти на схема - например имена на таблици, имена на колони и т.н.

Позволява ви да създадете всеки низ и след това да изпълните този низ като SQL оператор.
Без него променливите на процедурата могат да се използват само за стойности в sql, напр. select * from table where column = my_variable

Във вашия пример името на таблицата се предоставя от променливата p_country - това е елемент от схемата, така че имате нужда от EXECUTE IMMEDIATE.

person Bohemian♦    schedule 24.07.2011
comment
Bohemian е напълно правилен, но вие също трябва да проучите динамичния SQL в документацията и да замените вашите литерали с променливи за свързване както за производителност, така и за сигурност от SQL Injection. - person Ollie; 25.07.2011
comment
Не можете да замените препратката към обектите на схемата в динамичния sql с променливи за свързване, така че p_country все още ще бъде проблем. В SQL Server бих използвал quotename на p_country, за да го направя безопасно. Не знам еквивалента в страната на Oracle. - person Shannon Severance; 25.07.2011