【PL/SQL開發】-----詭異啊
月初醫保對醫院藥店進行批量結算,在該過程中發現一個問題,在此記錄一下,當一個session執行一個包的時候,該包有兩個過程,先執行過程一將計算結果insert到表test中,然後過程二開始被執行insert select 進行表的複製。
但過程二select該表無返回值。奇詭。。。
將其程式碼邏輯摘出,實驗不以重現,有遇到的朋友留個言,謝了。
exec test_pkg.TEST_MAIN
CREATE OR REPLACE PACKAGE thsimis.test_pkg
AS
/******************************************************************************
NAME: test_pkg
PURPOSE:
AS
/******************************************************************************
NAME: test_pkg
PURPOSE:
REVISIONS:
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 2012-2-2 1. Created this package.
******************************************************************************/
PROCEDURE test_prc;
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 2012-2-2 1. Created this package.
******************************************************************************/
PROCEDURE test_prc;
PROCEDURE test_prc2;
PROCEDURE test_main;
END test_pkg;
/
END test_pkg;
/
CREATE OR REPLACE PACKAGE BODY test_pkg
IS
sqlstr VARCHAR2 (300);
vn_count NUMBER (6) := 0;
vs_name VARCHAR2 (18) := '12';
IS
sqlstr VARCHAR2 (300);
vn_count NUMBER (6) := 0;
vs_name VARCHAR2 (18) := '12';
PROCEDURE test_prc
IS
tmpvar NUMBER;
/******************************************************************************
NAME: test
PURPOSE:
IS
tmpvar NUMBER;
/******************************************************************************
NAME: test
PURPOSE:
REVISIONS:
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 2012-2-2 1. Created this procedure.
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 2012-2-2 1. Created this procedure.
NOTES:
Automatically available Auto Replace Keywords:
Object Name: test
Sysdate: 2012-2-2
Date and Time: 2012-2-2, 22:49:36, and 2012-2-2 22:49:36
Username: (set in TOAD Options, Procedure Editor)
Table Name: (set in the "New PL/SQL Object" dialog)
Object Name: test
Sysdate: 2012-2-2
Date and Time: 2012-2-2, 22:49:36, and 2012-2-2 22:49:36
Username: (set in TOAD Options, Procedure Editor)
Table Name: (set in the "New PL/SQL Object" dialog)
******************************************************************************/
BEGIN
tmpvar := 0;
BEGIN
tmpvar := 0;
BEGIN
INSERT INTO TEST
VALUES (12, '12');
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
-- Consider logging the error and then re-raise
RAISE;
END test_prc;
INSERT INTO TEST
VALUES (12, '12');
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
-- Consider logging the error and then re-raise
RAISE;
END test_prc;
PROCEDURE test_prc2
IS
tmpvar NUMBER;
n_cursor PLS_INTEGER := 0;
n_ret PLS_INTEGER := 0;
sqlstr VARCHAR2 (300);
sqlstr1 VARCHAR2 (300);
vn_count NUMBER (6) := 0;
vs_name VARCHAR2 (18) := '12';
/******************************************************************************
NAME: test
PURPOSE:
IS
tmpvar NUMBER;
n_cursor PLS_INTEGER := 0;
n_ret PLS_INTEGER := 0;
sqlstr VARCHAR2 (300);
sqlstr1 VARCHAR2 (300);
vn_count NUMBER (6) := 0;
vs_name VARCHAR2 (18) := '12';
/******************************************************************************
NAME: test
PURPOSE:
REVISIONS:
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 2012-2-2 1. Created this procedure.
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 2012-2-2 1. Created this procedure.
NOTES:
Automatically available Auto Replace Keywords:
Object Name: test
Sysdate: 2012-2-2
Date and Time: 2012-2-2, 22:49:36, and 2012-2-2 22:49:36
Username: (set in TOAD Options, Procedure Editor)
Table Name: (set in the "New PL/SQL Object" dialog)
Object Name: test
Sysdate: 2012-2-2
Date and Time: 2012-2-2, 22:49:36, and 2012-2-2 22:49:36
Username: (set in TOAD Options, Procedure Editor)
Table Name: (set in the "New PL/SQL Object" dialog)
******************************************************************************/
BEGIN
tmpvar := 0;
sqlstr := 'select id from test where name = ' || vs_name;
BEGIN
tmpvar := 0;
sqlstr := 'select id from test where name = ' || vs_name;
EXECUTE IMMEDIATE sqlstr
INTO vn_count;
INTO vn_count;
DBMS_OUTPUT.put_line (vn_count);
sqlstr1 :=
'insert into test_ll select id ,name from test where name = '
|| vs_name
|| ';';
n_cursor := DBMS_SQL.open_cursor ();
sqlstr1 := 'begin ' || sqlstr1 || ' end;';
DBMS_SQL.parse (n_cursor, sqlstr1, DBMS_SQL.native);
n_ret := DBMS_SQL.EXECUTE (n_cursor);
sqlstr1 :=
'insert into test_ll select id ,name from test where name = '
|| vs_name
|| ';';
n_cursor := DBMS_SQL.open_cursor ();
sqlstr1 := 'begin ' || sqlstr1 || ' end;';
DBMS_SQL.parse (n_cursor, sqlstr1, DBMS_SQL.native);
n_ret := DBMS_SQL.EXECUTE (n_cursor);
-- 關閉遊標
IF DBMS_SQL.is_open (n_cursor)
THEN
DBMS_SQL.close_cursor (n_cursor);
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
-- Consider logging the error and then re-raise
RAISE;
END test_prc2;
IF DBMS_SQL.is_open (n_cursor)
THEN
DBMS_SQL.close_cursor (n_cursor);
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
-- Consider logging the error and then re-raise
RAISE;
END test_prc2;
PROCEDURE test_main
IS
sqlstr VARCHAR2 (300);
vn_count NUMBER (6) := 0;
vs_name VARCHAR2 (18) := '12';
BEGIN
test_prc;
IS
sqlstr VARCHAR2 (300);
vn_count NUMBER (6) := 0;
vs_name VARCHAR2 (18) := '12';
BEGIN
test_prc;
FOR i IN 1 .. 9
LOOP
test_prc2;
END LOOP;
END test_main;
END;
LOOP
test_prc2;
END LOOP;
END test_main;
END;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13726712/viewspace-715666/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- (轉)pl/sql開發異常處理SQL
- PL/SQL開發記錄SQL
- PL/SQL 08 異常 exceptionSQLException
- PL SQL異常處理.SQL
- 自定義PL/SQL異常SQL
- 一例“詭異”報表SQL需求分析SQL
- PL/SQL 事務持久化異常 / PL/SQL commit優化SQL持久化MIT優化
- PL/SQL異常處理初步(轉)SQL
- WEB PL/SQL Report 的開發方法WebSQL
- PL/SQL開發中動態SQL的使用方法SQL
- pl/sql中錯誤的異常處理SQL
- 詭異的”慢查詢“
- C語言之詭異字串C語言字串
- JavaScript 詭異的0.01JavaScript
- 一個詭異的 Pulsar InterruptedException 異常Exception
- 記錄一次詭異的拼接sql不生效問題SQL
- pl/sql 異常處理的概念和術語SQL
- 詭異!React stopPropagation失靈React
- PL/SQLSQL
- GP詭異的查詢轉換
- 詭異的無線網路卡Down
- (原)使用PL/SQL開發XML PUBLISHER報表的步驟SQLXML
- Oracle PL/SQL語言初級教程之異常處理OracleSQL
- SQL&PL/SQL (轉)SQL
- PL/SQL 宣告SQL
- PL/SQL cursorSQL
- PL/SQL打包SQL
- PL/SQL DEVSQLdev
- python 詭異問題求助各位大哥Python
- API 路由中介軟體的詭異API路由
- 介面詭異的404問題記錄
- 詭異的HP-UX Load averagesUX
- 很詭異的博弈問題分析方法
- PL/SQL 07 觸發器 triggerSQL觸發器
- 使用PL/Scope分析PL/SQL程式碼SQL
- PLSQL Language Reference-PL/SQL概覽-PL/SQL架構SQL架構
- [PL/SQL]10g PL/SQL學習筆記(一)SQL筆記
- [PL/SQL]10g PL/SQL學習筆記(二)SQL筆記