2009-12-21 27 views
7

Mevcut olmayan bir tabloda imleci bildirmek istiyorum. Tabii ki prosedürüm derlenmiyor.Oracle PLSQL - Mevcut olmayan bir tabloda imleci bildirme

Bu tablo geçici bir tablo ve ön işlem tarafından oluşturulur. Çalışma zamanında var olacak, ancak derleme zamanında başka bir hikaye. Benim seçme için

/I

EXECUTE IMMEDIATE 'operation from tmp_table'

kullandım ama göstericiler için geçici bir çözüm bulamazsa, bir diğer DML işlemleri günceller.

Bir yolu var mı?

SQL> declare 
    2 c sys_refcursor; 
    3 BEGIN 
    4 open c for 'select * from pepito'; -- 'pepito' does not exist 
    5 close c; 
    6 end; 
    7/
declare 
* 
ERROR at line 1: 
ORA-00942: table or view does not exist 
ORA-06512: at line 4 

sayesinde CREATE PROCEDURE kullanmalı mıyım:

Temelde, ben bu

drop table test; 

/*from this on should compile*/ 
DECLARE 
cursor c is select * from test; 

BEGIN 
    for reg in c LOOP 
    /*...*/ 
    END LOOP; 
END; 

güncelleştirme Şimdiye kadar derleme değil

derlemek istiyoruz.

Şimdiden teşekkürler.

+0

neden olmaz Oracle, içinde iyi bir uygulama olarak kabul edilmez. Kodu derlemek için 'declare'ınızı bir' CREATE PROCEDURE test_cursor AS' ile değiştirin. –

+0

: facepalm 15cccc – Tom

+0

TOAD'un bir derleme düğmesi yok. : S Bu önemsiz olmalı! – Tom

cevap

7

Böyle imleci tanımlamak mümkün olmalıdır: Ayrıca argümanlar bağlayabilir

DECLARE 
    c SYS_REFCURSOR; 
BEGIN 
    OPEN c FOR 'SELECT * FROM dual'; 
    CLOSE c; 
END; 

: Daha fazla bilgi OPEN-FOR Statement Oracle belgelerine bakın

OPEN c FOR 'SELECT * FROM dual WHERE DUMMY = :1' USING 'X'; 

için. Bir saklı yordam

CREATE OR REPLACE PROCEDURE test IS 
    c SYS_REFCURSOR; 
BEGIN 
    OPEN c FOR 'SELECT * FROM fdfdfdfdfd'; 
    CLOSE c; 
END; 
/
+0

Teşekkürler, ancak ikili mevcut bir tablodur. çalışma zamanında mevcut tablo yok – Tom

+0

yazım hatası, derleme zamanı – Tom

+0

Ne demek istediğinizden emin değilim. Sağlanan kaynağı 'SELECT * some some_not_existing_table' ile değiştirebilirsiniz. –

3

kullanılarak

Örnek Peter Lang tarafından açıklanan ref imleç yöntemine daha fazla esneklik elde etmek DBMS_SQL kullanabilirsiniz. Ama bu daha çok iş anlamına geliyor. gerektiği gibi geçici tablolar oluşturma

5

genellikle Küresel Geçici Tablolar iyidir ve aslında kod çalıştırmasına beri istisna olsun bu sorunu

+0

Bunu aklımda tutacağım, ancak zaman kısadır. Belki bir dahakine. – Tom

+1

+1 Küresel Geçici Tablolar, tabloları anında oluşturup yok etmekten çok daha iyi. Anında tablolar oluşturmak çok daha fazla hataya açık ve korumak için daha zordur. –

İlgili konular