oracle存储过程删除表
A. oracle删除一些表数据,然后释放表空间的存储过程
create or replace procere ttt is
begin
delete from bbb where。。。。。。 ;
commit;
execute immediate 'create table aaa as select * from bbb';
commit;
--删除表bbb所有数据
execute immediate 'truncate table bbb';
commit;
--将临时表aaa的数据转移到bbb表中
insert into bbb select * from aaa;
commit;
--删除临时表aaa
execute immediate 'drop table aaa';
commit;
end;
顺便说一句,你之前为什么要delete表bbb里的数据呢?还有,你存储过程里没end
---------补充------
||是用来区分普通字段和变量字段的
他那个写法不和我这个一样吗?
他那个只不过把我单引号里的sql设置成了一个变量,叫str
B. oracle删除多张表数据, 存储过程
报什么错,能把错误贴一下吗
另外注意delete语句和select还是有区别的,delete时只能删除满足条件的行,所以在delete后面不用指定列字段,即
delete D2_HC t where fkpkid in (d2_cpkid) and hctype='2';
C. Oracle 存储过程 删除表记录时删除不存在的记录也是显示删除成功
删除不存在的数据并不会促发Oracle的异常
对于delete
from
dept
where
deptno=p_deptno;
判断是否有数据被删除可以用sql%rowcount,sql%notfound
来判断
if
sql%rowcount
=
0
then
dbms_output.put_line('部门删除失败...');
end
if;
或者
if
sql%notfound
then
dbms_output.put_line('部门删除失败...');
end
if;
D. oracle 在sql developer里批量删除表
创建存储过程
createorreplacePROCEDURESP_DROPTABLE
(v_begintimeinvarchar2,
v_endtimeinvarchar2)
as
v_tablenamevarchar2(256);
cursorcur_tablenameis
selectobject_namefromuser_objectswhereobject_type='TABLE'andto_char(CREATED,'yyyy-mm-dd')
betweenv_begintime
andv_endtimeorderbyCREATEDdesc;
begin
opencur_tablename;
loop
fetchcur_tablenameintov_tablename;
exitwhencur_tablename%notfound;
executeimmediate'droptable'||v_tablename||'';
endloop;
closecur_tablename;
endsp_droptable;
执行存储过程
begin
SP_DROPTABLE('1999-01-01','2999-12-31');
end;
这个是把表干掉,不是清空数据哦,有疑问请追问
E. 怎么样利用存储过程实现(oracle )的添加、删除、查询、修改啊
列个表,里边我一样给你写个例子,你看着学学,我尽量给你做出注释
--建一个学生表
create table student (id int,name varchar2(10));
--插入两条测试数据
insert into student values (1,'张三');
insert into student values (2,'李四');
commit;
-------------用存储过程添加id为3,姓名为王五的学生-----------
create or replace PROCEDURE P_INSERT
(v_id int,--定义id变量
v_name varchar2--定义姓名变量)
is
begin
insert into student values (v_id,v_name);--执行插入操作
commit;
end;
执行的时候用下边的
BEGIN
p_insert(3,'王五');
END;
然后select * from student;
你会发现多了3 王五 这条数据
---------------用存储过程删除id为3的学生------------
create or replace PROCEDURE P_DELETE
(v_id int)--定义变量id
is
begin
delete from student where id=v_id;--执行删除操作
commit;
end;
执行
BEGIN
p_delete(3);
END;
执行完上边后执行
select * from student;
你会发现id为3的学生没了
---------------用存储过程查询id为2的学生姓名------------
create or replace PROCEDURE P_SELECT
(v_id int)--定义输入变量id
is
v_name varchar2(10);--定义输出变量name
begin
select name into v_name from student where id=v_id;--执行查询
dbms_output.put_line('学生姓名为:'||v_name);--输出结果
end;
执行
BEGIN
p_select(2);
END;
输出的结果就是id为2的学生姓名
-----------用存储过程查询id为1的学生姓名修改为赵六----------
create or replace PROCEDURE P_UPDATE
(v_id int,--定义要修改的id
v_name varchar2)--定义要修改后的名字
is
begin
update student set name=v_name where id=v_id;--执行修改操作
commit;
end;
执行
BEGIN
P_UPDATE(1,'赵六');
END;
然后你再
select * from student;
你会发现id为1的已经为赵六了
上边这些都是最简单的存储过程,在实际过程中肯定没这么简单
还有,我让你执行的
BEGIN
P_UPDATE(1,'赵六');
END;
这种东西可以当做oracle的job调用,可以定时执行
再有不懂的你再问吧,上边的仅做参考
累死我了,哈哈
F. 创建oracle存储过程,要求把一个表的数据导入另一个表中然后删除原表且要有异常处理和日志输出
又是你呀,我再把代码改改,很简单,代码如下
create or replace procere test
is
begin
--两个表字段一样
insert into 表名1 select * from 表名2;
--字段不一样
insert into 表名1(字段1,字段2,字段3) select 字段1,字段2,字段3 from 表名2;
--删除原表数据
delete 表名2
或者
TRUNCATE TABLE 表名2
COMMIT;
WHEN OTHERS THEN --当运行出现异常
dbms_output.put_line(SQLERRM(SQLCODE));--输出到控制台
end