存儲過程動態建表
嗯,我試一下
create PROCEDURE Create_Table @con NVARCHAR(1000)
AS
DECLARE @StrSql NVARCHAR(4000)
BEGIN
SET @StrSql = 'create table '+ 'test_'+@con+'(columns1 int,columns2 int)'
PRINT @StrSql
execute sp_executesql @StrSql
END
很簡單,表名是test_你的參數
運行exec Create_Table 'a'
得到的表是 test_a
表中2個欄位,columns1,columns2 數據類型都是int型
『貳』 oracle 在存儲過程中動態的建一個臨時表使用和在資料庫里寫死一個臨時表使用兩者有什麼區別
我們仍使用實驗 05中的環境,略去准備數據的過程。
我們仍然使用兩個會話,一個會話 run,用於運行主 SQL;另一個會話 ps,用於進行 performance_schema 的觀察:
主會話線程號為 29,
可以看到寫入的線程是 page_clean_thread,是一個刷臟操作,這樣就能理解數據為什麼是慢慢寫入的。
也可以看到每個 IO 操作的大小是 16K,也就是刷數據頁的操作。
結論:
我們可以看到,
1. MySQL 會基本遵守 max_heap_table_size 的設定,在內存不夠用時,直接將表轉到磁碟上存儲。
2. 由於引擎不同(內存中表引擎為 heap,磁碟中表引擎則跟隨 internal_tmp_disk_storage_engine 的配置),本次實驗寫磁碟的數據量和實驗 05中使用內存的數據量不同。
3. 如果臨時表要使用磁碟,表引擎配置為 InnoDB,那麼即使臨時表在一個時間很短的 SQL 中使用,且使用後即釋放,釋放後也會刷臟頁到磁碟中,消耗部分 IO。
『叄』 如何用存儲過程動態創建表
默認情況下,@XXX參數只能代替常量,不能代替表名、列名或其他資料庫對象的名稱。
『肆』 如何用存儲過程動態創建SQL Server 數據表
你指的是動態創建臨時表吧?可以使用如下的方法(例如):CREATE
TABLE
#MyTempTable
(cola
INT
PRIMARY
KEY)INSERT
INTO
#MyTempTable
VALUES
(1)在表名前面加"#"表示創建臨時表,在程序結束後會自動刪除臨時表,而且每個客戶端實際不是使用同一個臨時表,而且,在程序結束後會自動釋放臨時表。我想你要的應該是這個,對嗎?
『伍』 oracle 的存儲過程中 動態的創建一張表 然後插入一個變數到這個表中,表能動態的創建但是變數不能插入進去
1、execute immediate ' insert into addtopinfo values('||sysdate||','||v_name||')'; v_name 既然是變數 怎麼可能會用' '括弧起來;
就算是 直接執行 的話 也是 execute immediate ' insert into addtopinfo values(sysdate,v_name);
2、如果有v_name的話 ,我建議你一般用拼sql的方式來執行
例如 如下格式(這個是我自己的procere截取的,可以參考下)
v_CreateSql := ' create table ' ||vv_owner||'.'|| vv_name_temp ||
' as select * from ' || iv_name || ' where 1=0';
execute immediate v_CreateSql;
3、下次報錯,請把你的出錯情況提出來。我們怎麼知道什麼錯呢?
『陸』 oracle存儲過程動態建表
需要用到動態sql。
1、首先要給用戶賦予許可權:
grantcreateanytableto用戶名;
2、創建存儲過程:
createprocerep_create_table
(v_sqlvarchar2)--輸入建表語句
as
begin
executeimmediatev_sql;
end;
3、執行:
『柒』 想用oracle的存儲過程動態建表
建立序列:
create sequence t_id
increment by 1
start with 1
nomaxvalue
cache 20;
建立自動建表過程:
create or replace procere pro_createtable(tname in varchar2 default to_char(sysdate,'yyyymm'))
as
v_sql varchar2(200);
v_tname varchar2(10);
begin
if length(tname)<>6 then
raise_application_error(-20000,'輸入參數長度不夠,不能轉換為日期格式!');
end if ;
if to_number(substr(tname,5,2)) not between 1 and 12 then
raise_application_error(-20001,'輸入參數中不包含有效的月份數字,不能轉換為日期格式!');
end if ;
--v_tname:=to_char(to_date(tname,'yyyymm'),'yyyymm');
v_tname:='hd_'||tname;
v_sql:='create table '||v_tname||' ('||
'id number not null,'||
'name varchar2(20),'||
'city varchar2(20))'||
'tablespace users';
execute immediate v_sql;
end;
測試:
begin
pro_createtable;
pro_createtable('201106');
pro_createtable('201115');--報錯
end;
『捌』 ORACLE 存儲過程如何實現動態建表或者是觸發器
需求沒說清楚,你說建立的新表有什麼需求?什麼叫每插入一條記錄都會自動添加匹配的其他三表的欄位值? 你在新表插數據和舊表有什麼關系?新表的欄位不是你自己定義的?去和什麼匹配
『玖』 SQL server 存儲過程動態創建表 不知如何著手
既然是生成新表,你可以定義一個參加拼湊sql語句,游標抓出proName的值,作為表名,sql_str = 'create table '+表名+'(colname varchar(100))',然後游標抓出txtLog的值,作為表裡的值,這時候sql_str+='insert into 表名 values('+txtLog的值+')'