ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle 存储过程中调用truncate命令。

oracle 存储过程中调用truncate命令。

原创 Linux操作系统 作者:lcmlsj 时间:2019-01-05 17:03:05 0 删除 编辑

数据库版本:

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Prod
PL/SQL Release 10.1.0.2.0 - Production
CORE 10.1.0.2.0 Production
TNS for 32-bit Windows: Version 10.1.0.2.0 - Production
NLSRTL Version 10.1.0.2.0 - Production



基本调用方法:
begin
EXECUTE IMMEDIATE 'truncate table test.t';
end;

测试:
SQL> conn test/test
已连接。
SQL> select * from t;

未选定行

SQL> desc t
名称
--------------------------------------------------
OWNER
OBJECT_NAME
SUBOBJECT_NAME
OBJECT_ID
DATA_OBJECT_ID
OBJECT_TYPE
CREATED
LAST_DDL_TIME
TIMESTAMP
STATUS
TEMPORARY
GENERATED
SECONDARY

SQL> insert into t select * from all_objects;

已创建47382行。

SQL> commit;

提交完成。

SQL> begin
2 EXECUTE IMMEDIATE 'truncate table test.t';
3 end;
4 /

PL/SQL 过程已成功完成。

SQL> select count(*) from t;

COUNT(*)
----------
0
测试之二,truncate操作对表上的对象有没有影响?
创建一个测试过程:
create or replace procedure test
2 as
3 a varchar2(40);
4 begin
5 select object_name into a from t;
6 dbms_output.put_line(a);
7* end;
SQL> /

过程已创建。

SQL> alter procedure test compile;

过程已更改。

SQL> insert into t
2 select * from all_objects
3 where rownum<21;

已创建20行。

SQL> commit;

提交完成。

SQL> select owner,object_name,object_type,status from dba_objects
2 where object_name='TEST';

OWNER
------------------------------
OBJECT_NAME
--------------------------------------------------------------------------
OBJECT_TYPE STATUS
------------------- -------
TEST
TEST
PROCEDURE VALID
SQL> begin
2 EXECUTE IMMEDIATE 'truncate table test.t';
3 end;
4 /

PL/SQL 过程已成功完成。

SQL> select * from t;

未选定行

SQL> select owner,object_name,object_type,status from dba_objects
2 where object_name='TEST';

OWNER
------------------------------
OBJECT_NAME
------------------------------------------------------------------------------
OBJECT_TYPE STATUS
------------------- -------
TEST
TEST
PROCEDURE VALID

执行truncate操作后,过程test的状态依然有效。


测试之三,使用命名过程。
SQL> create or replace procedure truct
2 as
3 begin
4 EXECUTE IMMEDIATE 'truncate table test.t';
5 end;
6 /

过程已创建。

SQL> alter procedure truct compile;

过程已更改。

SQL> insert into t
2 select * from dba_objects
3 where rownum<31;

已创建30行。

SQL> commit;

提交完成。

SQL> select count(*) from t;

COUNT(*)
----------
30

SQL> execute truct;

PL/SQL 过程已成功完成。

SQL> select count(*) from t;

COUNT(*)
----------
0


SQL> select owner,object_name,object_type,status from dba_objects
2 where object_name='TEST';

OWNER
------------------------------
OBJECT_NAME
--------------------------------------------------------------------------
OBJECT_TYPE STATUS
------------------- -------
TEST
TEST
PROCEDURE VALID
SQL>

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9599/viewspace-472976/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2002-04-09

  • 博文量
    100
  • 访问量
    114100