www.ctrt.net > 如何在orAClE中使用存储过程创建表,如果存在就先删除

如何在orAClE中使用存储过程创建表,如果存在就先删除

你可以认为存储过程是好多行SQL语句的结合体,也包含了临时变量,加减乘除。 你的SQL语句如果用到表就要建表。用不到就不建。

create or replace procedure drop_table_by_time(begin_time in varchar2, end_time in varchar2) is cursor cur_tables is select object_name from user_objects where object_type = 'TABLE' and created > to_date(begin_time,'yyyy-mm-dd'...

1、首先要保证该数据库用户有删除序列和新建序列的权限,存储过程中这个权限要显示赋权: grant create sequence to 数据库用户; grant drop any sequence to 数据库用户; 2、存储过程中创建序列和删除序列: 创建序列: execute immediate 'cre...

别的存储过程要调用需创建会话级的临时表,create global temporary table Student 。。。,创建表与调用存储过程必须放在同一个会话中才能调用到临时表,临时表不用删除,会话结束后会自己清空删除

select count(*) into flag from all_tables where table_name=upper(你要判断的表名) if (flag=0) then execute immedate 'create table 表名(列名1,列名2...)' end if;

删除不存在的数据并不会促发Oracle的异常 对于delete from dept where deptno=p_deptno; 判断是否有数据被删除可以用sql%rowcount,sql%notfound 来判断 if sql%rowcount = 0 then dbms_output.put_line('部门删除失败...'); end if; 或者 if sq...

使用动态sql,过程如下: CREATE OR REPLACE PROCEDURE Prc_Delete_Emp IS Lv_Sql VARCHAR2(200); BEGIN Lv_Sql := 'delete emp'; EXECUTE IMMEDIATE Lv_Sql; COMMIT; END;

ORACLE: DECLARE A NUMBER; BEGIN select count(*) INTO A from user_tables where table_name = '....'; if a >0 then return 1;//存在 else return 0; end if; EXCEPTION WHEN OTHER THEN NULL; END;

sql%rowcount就行。 其中的sql是oracle的内部游标,rowcount的意思是之前的dml sql语句影响的多少行数据。 如果是delete操作rowcount就是delete的数据,如果是insert,就是插入的数量...... 你可以在过程中加入这句去测试下: dbms_output.put_li...

网站地图

All rights reserved Powered by www.ctrt.net

copyright ©right 2010-2021。
www.ctrt.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com