2012-06-01 79 views
1

我想要做[email protected]其中remotedatabase是dblink地址的變量。那可能嗎?數據庫鏈接名稱變量

我正在使用Apex 4並嘗試在所有數據庫上獲得臨時空間。

當前查詢

select 'Total temp space available in :Database is '||sum(bytes)/1024/1024 ||' mb' from [email protected]:Database 

yeilds ORA-01729: database link name expected因爲變量沒有correcltly解決?

我是很新的SQL,對不起

+0

忽略我忘記逃跑的事實:數據庫從其餘的提示:P –

回答

1

您將需要使用動態SQL纔能有數據庫鏈接是可變的。在PL/SQL中,會看起來像

DECLARE 
    l_sql_stmt varchar2(1000); 
    l_tmp_space varchar2(1000); 
    l_database varchar2(100) := <<db link name>>; 
BEGIN 
    l_sql_stmt := 'select ''Total temp space available in ' ||l_database || ' is '' || sum(bytes)/1024/1024 ||'' mb'' from [email protected]' || l_database; 
    dbms_output.put_line(l_sql_stmt); 
    EXECUTE IMMEDIATE l_sql_stmt 
    INTO l_tmp_space; 
    dbms_output.put_line(l_tmp_space); 
END; 

基本上,你需要構建一個包含SQL語句的字符串,然後執行動態生成的字符串(這是比較複雜的SQL語句時本身是建立一個像你這樣的字符串 - 這使得找出哪些單引號可以避免一些挑戰)。

但是,根據您在APEX中要做的事情,您可能想要一些與衆不同的東西。例如,如果您嘗試基於此創建報告,則可以從SQL語句或返回SQL語句的函數填充常規(非交互式)報告。如果這就是你想要做的,你想要的東西,如

DECLARE 
    l_sql_stmt varchar2(1000); 
    l_tmp_space varchar2(1000); 
    l_database varchar2(100) := <<db link name>>; 
BEGIN 
    l_sql_stmt := 'select ''Total temp space available in ' ||l_database || ' is '' || sum(bytes)/1024/1024 ||'' mb'' from [email protected]' || l_database; 
    dbms_output.put_line(l_sql_stmt); 
    RETURN l_sql_stmt; 
END;