Как я могу выполнить оператор CREATE Oracle SQL в SELECT? - PullRequest
0 голосов
/ 07 сентября 2011

Вот SQL:

    select 'create table XX_' || replace(replace(trim(table_id),'-','_'),'%','X') || '_LOOKUP as select * from prn_tcodes where trim(table_id) = ''' || trim(table_id) || ''';'
from  prn_tcodes
group by table_id;

Я хочу, чтобы полученные операторы SQL выполнялись, есть ли способ?

Я использую Oracle 10g

Спасибо ,,,

Ответы [ 3 ]

3 голосов
/ 07 сентября 2011

В качестве альтернативы спулингу вы можете запустить его как анонимный блок PL / SQL (не тестировался!)

DECLARE 
  cursor all_codes 
      select 'create table XX_' || 
             replace(replace(trim(table_id),'-','_'),'%','X') || 
             '_LOOKUP as select * from prn_tcodes where trim(table_id) = ''' ||
             trim(table_id) as sql_stmt
      from  prn_tcodes
      group by table_id;

   rec all_codes%ROWTYPE;
BEGIN
   FOR rec IN get_objects LOOP
   BEGIN
      EXECUTE IMMEDIATE rec.sql_stmt;
   END LOOP;
END;
/

(Обратите внимание, что сгенерированный оператор больше не включает в себя завершающий ;)

2 голосов
/ 07 сентября 2011

Поместите вышеприведенный скрипт в файл, затем запустите этот файл.

spool myoutput.sql

-- Your SQL here

spool off;
@myoutput;
0 голосов
/ 07 сентября 2011

Вы хотите выполнить динамический SQL, поэтому проверьте execute immediate (см. Дополнительную информацию здесь и здесь ).

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