2009-05-19 35 views
7

Dinamik olarak bazı sorgular oluşturmak için gereken bir PL/SQL yordamını yazıyorum, bunlardan biri parametre olarak alınan bir sorgudaki sonuçları kullanarak geçici bir tablo oluşturmayı içerir.Bu sorguyu neden EXECUTE IMMEDIATE ile çalıştırmak başarısız oluyor?

CREATE OR REPLACE PROCEDURE sqlout(query IN VARCHAR2) 
IS 
BEGIN 
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ');'; 
END; 

O hatta böyle olduğu gibi çok basit sorgu ile doğru derler:

BEGIN 
    sqlout('SELECT * FROM DUAL'); 
END; 

BT ORA-00911: invalid character atar. Oluşturulan sorguyu el ile çalıştırırsam doğru şekilde çalışır. Bu noktada sorunun nedenini belirleyebiliyorum.

+1

Ben proc uygulamanız tarafından olayların normal akışı içinde çalıştırılıyor değil umut ... dinamik DDL (örneğin yeni bir ortam ayarlama) yönetici komut için sadece gerçekten uygundur. –

cevap

23

";" Hemen Çalıştırdığınız dizenin içinden.

EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')'; 
İlgili konular