oracle在存储过程中创建表
‘壹’ oracle 存储过程建表
这个过程就行了。。
create or replace procere wym
authid current_user
is
vn_ctn number(2);
begin
select count(*) into vn_ctn from user_all_tables a where a.table_name like upper('invbasdoc');
if vn_ctn > 0 then
execute immediate 'drop table invbasdoc';
end if;
execute immediate 'create table invbasdoc as select * from test_abcd';
end ;
原来的过程中:execute immediate 'drop table invbasdoc'; 当如果数据库中不存在这张表的时候就会报错的。。
上面是对数据库中是否存在表进行了判断,因此能够避免“表不存在”这样的错误。。
‘贰’ oracle 怎么在存储过程中创建一个临时表,在里面插入数据,再查找这个临时表的所有数据,最后drop这个表。
Oracle
的临时表的
处理机制,
和
sql
Server
的不一样。
假如你的临时表的结构不是每次执行都发生变化的话
那么就是事先
通过
CREATE
GLOBAL
TEMPORARY
TABLE
语句,把临时表建立好。
存储过程里面,就根据需要,
执行
INSERT
/
SELECT
之类的操作就可以了
‘叁’ 如何在oracle中使用存储过程创建表,如果存在就先删除
没有权限?具体点 或者贴图!
不过应该是没有create table和drop table的权限吧,你试试赋下给此用户看看
‘肆’ ORACLE存储过程创建临时表并插入数据。
存储过程创建表后,在编译阶段数据库中并没有该表。这时向表中插入数据,会提示表不存在。所以,插入语句要赋值到变量里,通过e来执行。
‘伍’ 如何在Oracle的存储过程中建表啊
可以在存储过程中使用execute immediate 'sql';子句来创建表,例如Execute Immediate 'create table test(id int)';
‘陆’ oracle存储过程中建表
首先根据需求,想好需要建哪些字段,哪些是主键,建在哪个表空间下,另外字段类型也要考虑好,因为一旦建成表往里面插入数据后,字段类型就不容易更改了
表建成之后,如果数据量很大,应该考虑建立针对某字段的索引。
‘柒’ oracle如何用存储过程建表
说的不明白
1.建什么样的表?
2.字段是怎么样的变量?
3.表内的数据怎么来?仅仅是一个表吗?
参数是怎么来的?输入的参数还是按照日期来的?
变量名是怎么来的?手动输入的字段名参数还是怎么?
我看你就把你想做什么说出来,你这样没法弄
----------------------------------------------------------------------
PROCEDURE SP_CREATE_new_table
(
on_flag OUT NUMBER,
out_reason OUT VARCHAR2
)
is
v_sql1 varchar2(2000);
v_a varchar2(1);
v_b varchar2(1);
v_c varchar2(1);
begin
select 'a' into v_a from al;
select 'b','c' into v_b,v_c from al;
v_sql1 :='create table '||v_a||'('||v_b||' varchar2(1),'||v_c||' varchar2(1))';
EXECUTE IMMEDIATE v_sql1;
commit;
EXCEPTION
WHEN OTHERS
THEN
on_flag := SQLCODE;
out_reason := SUBSTR (SQLERRM, 1, 255);
ROLLBACK;
END;
有什么看不懂的就问吧
运行后,执行select * from a;
表名就叫a,字段名叫b和c,都是按你说的
‘捌’ oracle存储过程中建表
在存储过程中建立表
要用 execute immediate('CREATE or replace table *****') 这样的语句格式
ddl 语句无法在orace 的存储过程直接执行,要用 execute immediate 来调用。
‘玖’ oracle存储过程创建表
CREATE OR REPLACE PROCEDURE list_xs_name as
str_sql varchar2(2000);
begin
str_sql := 'create global temporary table xs_name (xh int,name varchar2(255),kc varchar2(255),fs int) on commit preserve rows';
execute immediate str_sql;
str_sql := 'select * from xs_name';
execute immediate str_sql;
dbms_output.put_line(str_sql);
END;
‘拾’ 想用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;