編寫電子書包平臺所有表主鍵之儲存過程_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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql 儲存過程 procedure 批次建表MySql儲存過程
- oracle儲存過程書寫格式Oracle儲存過程
- mysql檢視儲存過程show procedure status;MySql儲存過程
- MySQL入門--儲存過程(PROCEDURE)和儲存函式(FUNCTION)MySql儲存過程儲存函式Function
- mysql儲存過程procedure、函式function的用法MySql儲存過程函式Function
- MySQL之儲存過程MySql儲存過程
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- Q&A:在SQL Server 2005中編寫儲存過程RVSQLServer儲存過程
- MySQL的寫入資料儲存過程MySql儲存過程
- MySQL 儲存過程進行切換表MySql儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- mssql sqlserver 批量刪除所有儲存過程的方法分享SQLServer儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- SQLSERVER儲存過程SQLServer儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- Oracle儲存過程Oracle儲存過程
- Oracle 編譯儲存過程卡死解決方法Oracle編譯儲存過程
- MySQL入門系列:儲存程式(三)之儲存過程簡介MySql儲存過程
- 23. 使用MySQL之使用儲存過程MySql儲存過程
- PostgreSQL獲取建表語句儲存過程SQL儲存過程
- Oracle儲存過程編譯卡死的解決方法Oracle儲存過程編譯
- Oracle儲存過程中跳出迴圈的寫法Oracle儲存過程
- JdbcTemplate調儲存過程JDBC儲存過程
- 造數儲存過程儲存過程
- 儲存過程——遊標儲存過程
- 儲存過程 傳 datatable儲存過程
- JAVA儲存過程(轉)Java儲存過程
- oracle的儲存過程Oracle儲存過程
- MySQL---------儲存過程MySql儲存過程
- linux呼叫儲存過程Linux儲存過程
- Winform呼叫儲存過程ORM儲存過程
- mysql儲存過程整理MySql儲存過程
- Oracle儲存過程-1Oracle儲存過程
- 用儲存過程和 JAVA 寫報表資料來源有什麼弊端?儲存過程Java
- 直播平臺軟體開發過程中的雲端儲存和備份