当前位置:首页 » 存储配置 » oracle存储过程动态表名

oracle存储过程动态表名

发布时间: 2022-03-30 15:37:13

‘壹’ 想用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语句或者存储过程实现: 根据某张表中的某个字段的值决定查询哪一张表

begin
for cur in(select id,flag fromu a)
loop
if cur.flag=0 then
select * from b;
...
else
select * from C;
...
end if;
end loop;
end;

‘叁’ ORACLE 存储过程如何实现动态建表或者是触发器

需求没说清楚,你说建立的新表有什么需求?什么叫每插入一条记录都会自动添加匹配的其他三表的字段值? 你在新表插数据和旧表有什么关系?新表的字段不是你自己定义的?去和什么匹配

‘肆’ oracle存储过程中查询动态表名

先建立结果表,也就是存放你最终结果的表

createtabletest
(avarchar2(100),
bvarchar2(100));

然后建立存储过程

createprocerep_insert
as
cursorcur_tbnameis
select'insertintotestselectcol1,col2from'||table_name
fromuser_tableswheretable_namelike'AA____BB';--这个位置的表名必须大写的A和B,col1和col2换成你实际的字段名称
begin
opencur_tbname;
loop
fetchcur_tbnameintov_sql;
exitwhencur_tbname%notfound;
executeimmediatev_sql;
commit;
endloop;
end;

我最终没测试,你自己测试一下,看哪有问题吧

‘伍’ oracle存储过程中动态建表

把后面的结束符去掉,如下
execute immediate 'create table fsn0831 as select prodid from fsng.pc_prod_service where 1=2';

‘陆’ oracle存储过程动态建表

需要用到动态sql。

1、首先要给用户赋予权限:

grantcreateanytableto用户名;

2、创建存储过程:

createprocerep_create_table
(v_sqlvarchar2)--输入建表语句
as
begin
executeimmediatev_sql;
end;

3、执行:

‘柒’ Oracle存储过程中如何把表名写在变量里面进行查询该表

大概这样
create or replace procere p_XX(tabName in varchar2) is
type t_cursor is ref cursor;
v_cursor t_cursor;
v_SQLStatement varchar2(300);

begin
v_SQLStatement = 'select xx from '||tabName ;
open v_cursor for v_SQLStatement;
loop fetch v_cursor into XXX;
exit when v_cursor%notfound;
--做你的操作
end loop; close v_cursor;
end;

‘捌’ 在 oracle 的存储过程中 如何声明一个动态表的记录型变量

你只能在存储过程中使用动态的匿名块了。

比如:

createorreplaceprocerepro1(p_tnamevarchar2)is
v_dy_sql_blockvarchar2(32767);
begin
v_dy_sql_block:='declare'||
'l_row'||p_tname||'%rowtype;'||
'....';
executeimmediatev_dy_sql_block;
end;

‘玖’ 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、下次报错,请把你的出错情况提出来。我们怎么知道什么错呢?

热点内容
java知识点总结 发布:2025-02-01 09:08:32 浏览:684
如何在手机版给服务器加光影 发布:2025-02-01 09:02:14 浏览:727
简单神器安卓系统的哪个好 发布:2025-02-01 09:00:48 浏览:354
社保卡密码如何异地改密码 发布:2025-02-01 08:57:22 浏览:33
什么安卓平板最好能开120帧 发布:2025-02-01 08:55:58 浏览:380
安卓怎么冻结苹果id账号 发布:2025-02-01 08:45:16 浏览:639
pythonforosx 发布:2025-02-01 08:43:50 浏览:763
ftp建站工具 发布:2025-02-01 08:42:07 浏览:532
linux开启ntp 发布:2025-02-01 08:31:42 浏览:284
excel密码加密 发布:2025-02-01 08:17:01 浏览:539