存儲過程報錯怎麼看
1.
打開pl/sql
developer如果
在機器上安裝了pl/sql
developer的話,打開pl/sql
developer界面輸入
用戶名,密碼和host名字,這個跟在程序中web.config中配置的完全相同,點擊確定
找到
需要調試的存儲過程所在的包(package
bodies),如pack_activity,點擊右鍵,在彈出菜單中選擇[查看],得到包中的所有存儲過程和他們的代碼.
2.
添加debug信息為了
能夠單步跟蹤存儲過程,需要為其所在的包添加debug信息,右鍵點擊需要調試的包,在彈出菜單中選中[添加調試信息](這個很重要).這樣
就為包體添加了調試信息。
3.
調
試存儲過程現在
所有的准備工作都做好了,可以調試跟蹤存儲過程了。選擇
需要調試的存儲過程,點擊右鍵,在彈出菜單中
選擇[測試],進去測試窗口.測試窗口中有為了測試該存儲過程自動所產生的代碼,當然你也可以自己另外加入和修改代碼,對於我們目前只是為了調試存儲過程,
自動生成的代碼已經足夠了。接著按照如下的步驟進行調試。
(1)添加存儲過程所需要的參數,我們項目中的大多數存儲過程都是需要參數
的,參數可以在測試窗口右下部分輸入。如:getpanno_new需要一個輸入參數v_employeeid,我們輸入180,輸出參數是mycursor,是查看結果的,不需要輸入任何值。
(2)開始調試,點擊[調試]菜單->[開始](或者按f9),就進去調試模式了,程序開始停在begin這一行.
(3)以後的調試過程跟我們熟悉的的調試過程就一樣了:運行(ctrl+r)單步
進入(ctrl+n)單步
跳過(ctrl+o)單步
退出(ctrl+t)或者
點擊debug工具條上的按扭:當按ctrl+n進去存儲過程的源代碼中後
在這
個窗口中可以查看過程中的變數值和堆棧。
(4)調試運行完了後,可以查看結果如下(點擊mycursor變數旁邊的按鈕).
4.
tip
令人
比較郁悶的是我們項目中很多的存儲過程都是一個select語句,不管這個select語句多麼復雜(select語句中有嵌套的子select語句),它也只能作為一行代碼,單步跟蹤就沒有什麼意義了。
② 調試存儲過程遇到資料庫錯誤如何查看錯誤信息
txt中包含有不是標準的字元格式,你可以先用導入EXCEL或ACCESS,然後再用SQL導入EXCEL或ACCESS,
③ CALL存儲過程,報錯.該怎麼處理
首先,把寫好的存儲過程執行檢查,看看是否報錯;
其次,如果報錯的話,就看看提示什麼錯誤,定位到錯誤的位置,修正它;
再次,就是運行檢查,如此按照以上的步驟反復驗證。
另外,需要技巧的是,有時候很長的存儲過程,需要逐步和分段分別執行調試。
④ 幫忙看一下我的存儲過程錯誤在哪
create or replace procere pro_insert (p_number number)return number is
begin
for i in 1..p_number loop
--insert into test100 values(i,'aa'||i,||' ');
insert into test100 values(i,'aa'||i,sysdate);
end loop;
--select count(*) into p_count from test100;
dbms_output.put_line(p_number||'行已被插入');
end;
/
⑤ oracle怎麼查看存儲過程報錯信息
create or replace procere proc_test( strAge in string, strName in string, ret_code out string, v_error_message out string) is
begin
declare
strsql varcchar(1024);
v_error_desc varcchar(1024);
begin
v_error_desc :='student';
strsql :='select name from student where age=100';
execute immediate strsql using strAge ;
v_error_desc :='teacher';
strsql :='select age from teacher where name=jill';
execute immediate strsql using strName ;
ret_code:=0;
v_error_desc :='OK';
v_error_message:='OK';
EXCEPTION
WHEN OTHERS THEN
ret_code := sqlcode;
v_error_desc := '錯誤位置:' || v_error_desc;
v_error_message := sqlerrm;
rollback;
end;
end proc_cancel_digital_id;
⑥ 求高手 解答存儲過程一直報錯,看看哪錯了
exec('if exists(select * from tempdb.dbo.sysobjects where name='''+@tmptable+''')
• drop table 『+@tmptable) ---每次調用存儲過程前先清除上次調用的結果
如果此語句執行成功,那麼@tmptable就不存在了,後面的 select into '+@tmptable 就不能執行了
改成 delete from table 『+@tmptable)
⑦ 怎樣判斷存儲過程出錯並捕捉錯誤信息
--通過sqlcode , sqlerrm 這兩個內置變數來查看,例如:
DECLARE
--聲明異常
some_kinds_of_err EXCEPTION; -- Exception to indicate an error condition
v_ErrorCode NUMBER; -- Variable to hold the error message code
v_ErrorText VARCHAR2(200); -- Variable to hold the error message text
BEGIN
--...
--拋出異常
IF ( ... ) THEN --(括弧內填拋出異常的條件)
RAISE some_kinds_of_err;
END IF;
--...
EXCEPTION
--捕捉異常
WHEN some_kinds_of_err THEN
/* do something to Handler the errors */
null;
--捕捉其他異常,並獲得 捕獲異常的內容
WHEN OTHERS THEN
v_ErrorCode := SQLCODE;
v_ErrorText := SUBSTR(SQLERRM, 1, 200);
-- Note the use of SUBSTR here.
dbms_output.put_line(v_ErrorCode || '::'||v_ErrorText);
END;
/
/**
sqlcode 就是錯誤代碼
sqlerrm 就是sql錯誤信息。注意用substr來截取,否則輸出很難看。
**/
⑧ 用存儲過程往表裡面插入數據,總是報錯,還請大俠幫忙看下錯在哪裡
因為在編譯前oracle會檢查test表是否存在,如果不存在就提示無視圖。
建議先重建一下這個表,每次操作前先執行drop table操作,然後在執行create table操作,這樣就能通過編譯。
代碼如下:
CREATE OR REPLACE PROCEDURE UP_TEST(STRBEGIN VARCHAR2,
STREND VARCHAR2,
OCUR OUT SYS_REFCURSOR) IS
V_I INT;
V_J INT;
ISQL VARCHAR2(200);
DPTABLE VARCHAR2(200) := 'drop table test';
BEGIN
V_I := STRBEGIN;
V_J := STREND;
EXECUTE IMMEDIATE DPTABLE;
ISQL := 'create global temporary table test(sid int) on commit delete rows';
EXECUTE IMMEDIATE ISQL;
WHILE V_I <= V_J LOOP
INSERT INTO TEST VALUES (V_I);
END LOOP;
OPEN OCUR FOR
SELECT T.SID FROM TEST T;
END;
同時臨時表就是一個緩存數據的表,在執行提交操作的時候就被清空了,沒有必要每次都去新建然後刪掉,他佔用的存儲空間很少。
⑨ plsql怎麼看存儲過程的錯誤(信息)日誌
右鍵test,對存儲過程進行測試!可以用變數記錄錯誤信息,用異常捕捉來報告這個變數里記錄的錯誤信息。
當然,也可以使用自己的錯誤日誌表來記錄具體錯誤原因,錯誤代碼,方便查找錯誤原因。
⑩ ORACLE 存儲過程報錯 PLS-00103 求查錯
其中username ,counter ,rolename 是傳入參數,傳入參數不能賦值,即第7、8行語句有問題,建議刪除。
建議在plsql工具中編輯,方便。
(10)存儲過程報錯怎麼看擴展閱讀
存儲過程(Stored Procere)是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,存儲在資料庫中,經過第一次編譯後再次調用不需要再次編譯,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是資料庫中的一個重要對象。