【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
- Oracle PL/SQLOracleSQL
- pl/sql to_dateSQL
- PL/SQL 運算子SQL
- PL/SQL 條件SQL
- PL/SQL 迴圈SQL
- PL/SQL 遊標SQL
- 記錄一次詭異的拼接sql不生效問題SQL
- 詭異的”慢查詢“
- C語言之詭異字串C語言字串
- 一個詭異的 Pulsar InterruptedException 異常Exception
- Oracle PL/SQL塊簡介OracleSQL
- ultraedit高亮顯示pl/sqlSQL
- python 詭異問題求助各位大哥Python
- Oracle 的PL/SQL語言使用OracleSQL
- PL/SQL 條件控制語句SQL
- PL/SQL程式設計急速上手SQL程式設計
- 6. Oracle開發和應用—6.4. PL/SQL語法—6.4.3. 賦值OracleSQL賦值
- 6. Oracle開發和應用—6.4. PL/SQL語法—6.4.2. 變數OracleSQL變數
- [20190116]詭異的問題2.txt
- 介面詭異的404問題記錄
- API 路由中介軟體的詭異API路由
- [20240607]PL/SQL中sql語句的註解.txtSQL
- 使用profiler測試Oracle PL/SQL效能OracleSQL
- 6. Oracle開發和應用—6.4. PL/SQL語法—6.4.1. 語句塊OracleSQL
- 一個詭異的"可見性"問題
- Linux終端的8個詭異傢伙Linux
- 詭異!std::bind in std::bind 編譯失敗編譯
- 使用 Arthas 排查 SpringBoot 詭異耗時的 BugSpring Boot
- 啊發發
- 專案升級到.Net8.0 Autofac引發詭異的問題
- 解密詭異併發問題的幕後黑手:可見性問題解密
- Oralce之PL/SQL程式設計(遊標)SQL程式設計
- OCP 複習筆記之PL/SQL (1)筆記SQL
- Oracle PL/SQL程式碼中的註釋OracleSQL
- PL/SQL第二章--基本語法SQL
- PL/SQL第三章--游標SQL
- OCP 複習筆記之PL/SQL (3)筆記SQL
- 6.4. PL/SQL語法——6.4.7. 集合SQL