2016-03-29 19 views
0

Verileri Oracle'dan bir xml dosyasına vermek istiyorum. Bunun hakkında nasıl gideceğimi bilmiyorum. Bu, şu ana kadar denediğim şeyin kodudur, ancak tablonun mevcut olmadığını söyleyen bir hata alıyorum. Şema, tablo için seçkin ayrıcalığa sahiptir ve ayrıca tablo aynı şemadadır. Bu arada takıldım. Tablonun sahibi prosedürünün sahibiyle aynı değilse Herhangi bir yardımVerileri bir tablodan xml dosyasına nasıl dışa aktarabilirim?

CREATE PROCEDURE xmlUnload (ulSchema IN VARCHAR2, ulTable IN VARCHAR2, ulDirectory IN VARCHAR2) 
IS 
    l_file   UTL_FILE.file_type; 
    xml_data  VARCHAR2(5000); 
BEGIN 
    SELECT dbms_xmlgen.getxml('SELECT * FROM '||ulSchema||'.'||ulTable) xml INTO xml_data FROM dual; 

    l_file := UTL_FILE.fopen(ulDirectory,ulSchema'.'ulTable, 'w'); 

    UTL_FILE.putf(l_file, xml_data); 
    UTL_FILE.fclose(l_file); 
END xmlUnload; 

cevap

1

mutluluk duyacağız, muhtemelen invoker hakları vs definer bir kasanın içine koşuyoruz.

Roller yordamını bir anonim blok veya adlandırılmış blok olup olmadığına bağlıdır bir PL/SQL bloğu (PL/SQL Bloklarda rollerin kullanımını Nasıl Çalışır:

olarak here belirtti işlev veya tetikleyici) ve kimlik hakları veya kullanıcı haklarıyla birlikte çalışıp çalışmadığı. Definer Hakları ile Named Bloklar Kullanılan

Roller Tüm roller Definer haklarına yürüten herhangi adlandırılmış PL/SQL bloğu (saklı yordam, işlev veya tetikleyici) devre dışı bulunmaktadır. Roller, ayrıcalık denetimi için kullanılmaz ve tanımlayıcı hakları prosedürü içinde rolleri ayarlayamazsınız.

Burada "tanıtma hakları prosedürü" hakkında konuştuğunu unutmayın.

Bu sorunun çözülüp çözülemeyeceğini invoker haklarını (prosedürü yürütülürken kullanıcı) kullanabilir ve görmek için prosedürü ayarlamayı deneyebilirsiniz:

CREATE PROCEDURE xmlUnload (ulSchema IN VARCHAR2, ulTable IN VARCHAR2, ulDirectory IN VARCHAR2) 
AUTHID CURRENT_USER -- options are "CURRENT_USER" or "DEFINER"; DEFINER is the default 
IS 
    l_file   UTL_FILE.file_type; 
    xml_data  VARCHAR2(5000); 
BEGIN 
    SELECT dbms_xmlgen.getxml('SELECT * FROM '||ulSchema||'.'||ulTable) xml INTO xml_data FROM dual; 

    l_file := UTL_FILE.fopen(ulDirectory,ulSchema'.'ulTable, 'w'); 

    UTL_FILE.putf(l_file, xml_data); 
    UTL_FILE.fclose(l_file); 
END xmlUnload; 

Kontrol burada invoker_rights_clause hakkında ayrıntılı bilgi: http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/create_procedure.htm#i2065815