oracle存储过程中创建表
A. 请问用oracle的存储过程如何创建一个表创建前判断此表名是否已存在,已存在则不创建
说下思路吧
就是过程定义个字符串变量 createtable
然后再给变量赋值
createtable:='create table table_name()";
大概就这样
判断的话你写个if语句就行
补充:
另一位说的不错
你可以使用all_tables。注意你的表名要大写。因为oracle里的数据字典存储的数据是区分大小写的。可以查询出是否存在你要创建的表。
B. oracle 怎么在存储过程中创建一个临时表,在里面插入数据,再查找这个临时表的所有数据,最后drop这个表。
Oracle
的临时表的
处理机制,
和
sql
Server
的不一样。
假如你的临时表的结构不是每次执行都发生变化的话
那么就是事先
通过
CREATE
GLOBAL
TEMPORARY
TABLE
语句,把临时表建立好。
存储过程里面,就根据需要,
执行
INSERT
/
SELECT
之类的操作就可以了
C. ORACLE存储过程创建临时表并插入数据。
你这个语法是不对的
你create
table
as
select
的时候是不能指定列的数据类型,因为你是根据查询结果创建一个表,列名和数据类型都是由查询结果定的,或者你可以
create
table
然后
insert
into
table
select
...
改成下面这样
create
or
replace
procere
test_proc
as
begin
execute
immediate
'
create
global
temporary
table
T_AB
as
select
A.id_,
A.name_,
B.num_
from
T_A
A,
T_B
B
where
A.id_=B.id_';
end;
D. oracle存储过程中建表
在存储过程中建立表
要用 execute immediate('CREATE or replace table *****') 这样的语句格式
ddl 语句无法在orace 的存储过程直接执行,要用 execute immediate 来调用。
E. 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。
F. ORACLE存储过程创建临时表并插入数据。
存储过程创建表后,在编译阶段数据库中并没有该表。这时向表中插入数据,会提示表不存在。所以,插入语句要赋值到变量里,通过e来执行。
G. ORACLE存储过程中,可以动态创建表么
需要用到动态sql。
1、首先要给用户赋予权限:
grant create any table to 用户名;
2、创建存储过程:
create procere p_create_table
(v_sql varchar2)--输入建表语句
as
begin
execute immediate v_sql;
end;
3、执行:
H. 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;