1、語法:
create or replace procedure messagebackup_createTable //此處存儲過程名稱不能超過30個字符
as tableName varchar2(100); //聲明變量
tableCount Number;
thisYearMonth;
begin
thisYearMonth:=TO_CHAR(sysdate,'yyyyMM'); //給變量賦值使用 :=
tableName:='MESSAGEBACKUP_'||thisYearMonth; //oracle大小寫敏感,盡量使用大寫;使用變量連接是使用符號 ||變量
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;
if tableCount=0 then
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; //結束這個存儲過程
2、執行存儲過程
begin
messagebackup_createTable;
end;
3、plsql如何大小寫切換
選中需要改變大小寫的文本單擊右鍵-->選項-->選擇大寫(小寫)
4、plsql存儲過程的debug
登錄plsql選擇MyObject --> procedure -->選中要debug的存儲過程單擊右鍵 --> test(測試)-->彈出窗點擊搜索那個圖片啟動debug,右邊綠色三角符號為運行,小的粉色方形按鈕為單步跟蹤,單步跳出等;