一、语法:sql
create or replace procedure messagebackup_createTable //此处存储过程名称不能超过30个字符oracle
as tableName varchar2(100); //声明变量测试
tableCount Number;this
thisYearMonth;debug
begin 索引
thisYearMonth:=TO_CHAR(sysdate,'yyyyMM'); //给变量赋值使用 := 图片
tableName:='MESSAGEBACKUP_'||thisYearMonth; //oracle大小写敏感,尽可能使用大写;使用变量链接是使用符号 ||变量table
select count(1) into tableCount from user_tables where table_name = tableName; //若是上一行tableName的赋值使用的是小写,这块会出错,明明已经建好了这个表可是查询的时候仍是0,缺又不能从新建立; 判断当前用户下是否有要建立的表,并将数量赋值给tableCount,select count(1) into tableCount from user_tables where table_name = tableName; class
if tableCount=0 then test
execute immediate 'create table '||tableName||' //execute immediate 马上执行,若是当前存储结构下边用到当前创键的表格就不会报不存在的
as select * from MESSAGEBUCKUP_TEMP where 1=2'; //复制表结构而不复制表数据的oracle写法 若是须要新建不少表结构同样的表,能够把基本表结构创建出来,而后复制这个表结构,这样若是改了基本表结构就只须要修改基础表结构,不够用改存储结构;
execute immediate 'create index IDX_MSG_'||thisYearMonth||'_MOBILE' on '||tableName||' (MOBILE)'; //在表tableName的Mobile字段创建索引
EXECUTE IMMEDIATE 'create sequence MSGBAK_'||thisYearMonth||'_ID_SEQ //创建sequence 主要是为了主键自增
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE';
EXECUTE IMMEDIATE 'create or replace trigger T_MSGBAK_'||thisMonth||'_ID //创建触发器为了表新增行的时候触发给行的ID设置自增值
before insert on '||tableName1||'
for each row
begin
select MSGBAK_'||thisMonth||'_ID_SEQ.nextval into :new.id from dual;
end;'; // 触发器结束须要有分号 ; 也就是说在 ''号里边的分号必须有否则会报错;
end if; //结束一个if条件
if xxx then xxxx end if; //另外一个if条件
END messagebackup_createTable; //结束这个存储过程
二、执行存储过程
begin
messagebackup_createTable;
end;
三、plsql如何大小写切换
选中须要改变大小写的文本单击右键-->选项-->选择大写(小写)
四、plsql存储过程的debug
登陆plsql选择MyObject --> procedure -->选中要debug的存储过程单击右键 --> test(测试)-->弹出窗点击搜索那个图片启动debug,右边绿色三角符号为运行,小的粉色方形按钮为单步跟踪,单步跳出等;