編寫電子書包平臺所有表主鍵之儲存過程_sp_stored procedure
#有了一點寫儲存過程的思路,花幾個小時,人真笨
declare
v_max_id number;
begin
select max_id into v_max_id from t_max_id where tname='&table';
update t_max_id set max_id=v_max_id+1;
commit;
exception when no_data_found then
v_max_id:=1;
insert into t_max_id values('&table',v_max_id);
commit;
end;
/
declare
v_max_id number;
begin
select max_id into v_max_id from t_max_id where tname='&table';
update t_max_id set max_id=v_max_id+1;
commit;
exception when no_data_found then
v_max_id:=1;
insert into t_max_id values('&table',v_max_id);
commit;
end;
/
PL/SQL procedure successfully completed.
#######建立測試表
SQL> desc t_max_id;
Name Null? Type
----------------------------------------- -------- ----------------------------
TNAME VARCHAR2(30)
MAX_ID NUMBER
SQL> desc t_max_id;
Name Null? Type
----------------------------------------- -------- ----------------------------
TNAME VARCHAR2(30)
MAX_ID NUMBER
SQL>
#########生成pd電子書包平臺所有表主鍵的儲存過程
create or replace procedure p_get_table_max_pk(v_table_name varchar2,v_out_max_id out number)
is
v_max_id number;
begin
select max_id into v_max_id from t_max_id where tname=v_table_name;
update t_max_id set max_id=v_max_id+1 where tname=v_table_name;
commit;
v_out_max_id:=v_max_id+1;
exception when no_data_found then
v_max_id:=1;
insert into t_max_id values(v_table_name,v_max_id);
v_out_max_id:=v_max_id;
commit;
end;
/
create or replace procedure p_get_table_max_pk(v_table_name varchar2,v_out_max_id out number)
is
v_max_id number;
begin
select max_id into v_max_id from t_max_id where tname=v_table_name;
update t_max_id set max_id=v_max_id+1 where tname=v_table_name;
commit;
v_out_max_id:=v_max_id+1;
exception when no_data_found then
v_max_id:=1;
insert into t_max_id values(v_table_name,v_max_id);
v_out_max_id:=v_max_id;
commit;
end;
/
小結;
1,異常要寫在plsql程式碼塊的最後,而不是最前面
2,out輸出的引數,在plsql程式碼塊中:比如:v_out_max_id同時要在正常處理邏輯與異常處理邏輯兩處進行 v_out_max_id:=某個變數或什麼值 的操作;
3,在sqlplus中呼叫儲存過程及顯示輸出引數out為如下方法
SQL> var a number #定義與儲存過程out輸出 引數對應的變數
SQL> exec p_get_table_max_pk('t1',:a);#執行儲存過程
PL/SQL procedure successfully completed.
SQL> select * from t_max_id;
TNAME MAX_ID
------------------------------ ----------
t1 2
------------------------------ ----------
t1 2
SQL> print a;#顯示輸出變數值
A
----------
2
----------
2
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-666388/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 儲存過程plsql_stored procedure_為業務系統所有業務表生成主鍵pk方式儲存過程SQL
- mysql 儲存過程 procedure 批次建表MySql儲存過程
- oracle父儲存過程呼叫子儲存過程procedure與輸出引數Oracle儲存過程
- 編寫JAVA儲存過程Java儲存過程
- SQL 建立儲存過程PROCEDURESQL儲存過程
- Stored Procedure(儲存過程)編寫經驗和最佳化措施 (轉)儲存過程
- oracle儲存過程書寫格式Oracle儲存過程
- PL/SQL 05 儲存過程 procedureSQL儲存過程
- [Procedure]Oracle之分頁儲存過程Oracle儲存過程
- Oracle 基礎 ----procedure(儲存過程)Oracle儲存過程
- 編寫儲存過程基本注意事項儲存過程
- mysql檢視儲存過程show procedure status;MySql儲存過程
- MySQL入門--儲存過程(PROCEDURE)和儲存函式(FUNCTION)MySql儲存過程儲存函式Function
- 修改儲存過程所有者儲存過程
- 近期編寫tcbs儲存過程小記(1)儲存過程
- mysql儲存過程procedure、函式function的用法MySql儲存過程函式Function
- oracle底層字典表obj$及source$與儲存過程procedure系列一OracleOBJ儲存過程
- oracle底層字典表obj$及source$與儲存過程procedure系列二OracleOBJ儲存過程
- oracle底層字典表obj$及source$與儲存過程procedure系列三OracleOBJ儲存過程
- oracle底層字典表obj$及source$與儲存過程procedure系列四OracleOBJ儲存過程
- oracle底層字典表obj$及source$與儲存過程procedure系列五OracleOBJ儲存過程
- 編寫和優化SQL Server的儲存過程優化SQLServer儲存過程
- 儲存過程編寫經驗和優化措施儲存過程優化
- MySQL之儲存過程MySql儲存過程
- 把自編儲存過程設定為系統儲存過程儲存過程
- 儲存過程編寫經驗和最佳化措施儲存過程
- oracle procedure 儲存過程輸入及輸出in out示例Oracle儲存過程
- procedure儲存過程呼叫dba字首的字典dba_objects儲存過程Object
- 通過v$access檢視正在執行的儲存過程procedure儲存過程
- 儲存過程編譯時卡死儲存過程編譯
- dbms_sql包所有子過程及函式SQL函式
- ORACLE儲存過程中建立子過程的測試!Oracle儲存過程
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- MyBatis 示例之儲存過程MyBatis儲存過程
- 觸發器trigger中呼叫包package(包中含:儲存過程procedure及函式function)_plsql觸發器Package儲存過程函式FunctionSQL
- Oracle儲存過程編寫經驗和最佳化措施Oracle儲存過程
- 儲存過程編寫經驗和最佳化措施(轉)儲存過程
- oracle儲存過程(procedure)中執行動態SQL小記Oracle儲存過程SQL