2016-04-13 14 views
0

paketini çalıştırırken. Fikir, select deyimini kullanarak PL/SQL'den çağrılabilecek bir paket oluşturmaktı. paket çalışır ve tablo oluşturur ama Oracle SQL Developer SELECT evil_pkg.CreateTab() FROM DUAL çalıştırdığınızda benORA-00904, belirli bir güvenlik testi vakası kurmaya çalışırken SELECT

ORA-00904 alıyorum: "EVIL_PKG" "CREATETAB": geçersiz tanımlayıcı 00904. 00000 - "% s: geçersiz tanımlayıcı". * Neden:
* Eylem: Line'da hatası: 41 Kolon: 8

bunu yapmak mümkündür herhangi bir yolu var mı? Buradaki amaç, paketi bu şekilde yürütmektir, sadece paketini yürütmek için değil. Paket içindeki bir prosedür SQL

--Specification 
CREATE OR REPLACE PACKAGE evil_pkg AS 
    PROCEDURE CreateTab; 
END evil_pkg; 
/

--Body 
CREATE OR REPLACE PACKAGE BODY evil_pkg AS 

    PROCEDURE CreateTab 
AS 

BEGIN 

execute immediate 'CREATE TABLE my_evil_table (id number) '; 

     COMMIT ; 

EXCEPTION 
     WHEN OTHERS THEN 
     DBMS_OUTPUT.PUT_LINE(SQLERRM); 
     DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE); 
     ROLLBACK; 
     RAISE; 

     END CreateTab; 

END evil_pkg; 

cevap

1

denilen olamaz:

Bu

paketidir.

Prosedürünüzü bir işleve dönüştürürseniz (bu, belki de bir doğru veya yanlış döndürür veya bir değer döndürür), bu sql'den çağrılabilir.

Anlayışınızı daha da geliştirmek için discussion'u burada görebilirsiniz.

İlgili konular