存储过程动态建表
嗯,我试一下
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的值+')'