2016-12-28 55 views
-1

我有大約20個語句來創建表格。數據每年都在變化。我如何在Oracle的SQL窗口頂部聲明一個變量,並在每個create語句中使用它。如何使用變量在Oracle PLSQ語句中創建表格

Declare 
     new_yr number(5) := 2015; 
BEGIN 

create table my_table as 
select new_yr as yr, 
     t.index, 
     t.xcode, 
     ......... 
......... 
...... 
from acccounts t 
Join persons a on a.new_yr=(new_yr-t.new_yr) 
group by t.index, 
     t.xcode; 

該代碼似乎不起作用。

+0

嘗試使用與現有列別名不同的名稱。將您的new_yr變量重命名爲v_new_yr – mdem

+0

我這樣做並獲得ORA-06550:第5行,第1列: PLS-00103:在期待以下某項時遇到符號「CREATE」: (begin case declare exit for goto if循環mod null編譯指示 用<標識符>提升返回選擇更新> << 繼續關閉當前刪除讀取鎖定插入打開回滾 保存點集合sql執行提交forall合併管道清洗 – Unrealworld

回答

0

您可以通過創建Dynamic CTAS腳本併發出EXECUTE IMMEDIATE語句來完成此操作。

P.S.不知道您是否將所有表格都加入表PERSONS,因此只需編輯即可。

Declare 

     new_yr_var varchar2(100) := 2015; 

     cursor tbl_names 
     is 
     select owner 
      , Table_name 
     from dba_tables 
     where table_name in ('your_table_names_here'); 

     sql_statement := varchar2(4000); 

BEGIN 

    for c1 in tbl_names loop; 

     sql_statement := 'CREATE TABLE '||C1.owner||'.'||C1.Table_name||'_'||new_yr_var||' AS '; 
     sql_statement := sql_statement||'SELECT COLUMNS_HERE FROM'||C1.owner||'.'||C1.Table_name||'Join persons a on a.new_yr=(new_yr-t.new_yr) ';   
     sql_statement := sql_statement||'group by t.index, t.xcode'; 

     EXECUTE IMMEDIATE (sql_statement); 

    end loop; 

END; 
相關問題