1. oracle 測試存儲過程 是哪個許可權
Oracle規定,在默認的情況下,在調用存儲過程用戶的角色不起作用,即在執行存儲過程時只有Public許可權。所以在調用Create table時,會有許可權不足的提示。
只需要使用IR Procere就能很快解決問題啦,把代碼修改為如下:
CREATE OR REPLACE PROCEDURE TestProc AUTHID current_user
IS
flag number;
BEGIN
select count(*) into flag from all_tables where table_name='TEMP3';
if (flag=0) then
execute immediate 'create global temporary table TEMP3 on commit preserve rows as select * from BUSI_ECONTRACT';
else
execute immediate 'insert into TEMP3 select * from BUSI_ECONTRACT';
end if;
END ;
執行存儲過程,順利通過。
2. 如何oracle調試存儲過程
oracle存儲過程調試方法
PL/sql中為我們提供了【調試存儲過程】的功能,可以幫助你完成存儲過程的預編譯與測試。
點擊要調試的存儲過程,右鍵選擇TEST
如果需要查看變數,當然調試都需要。在右鍵菜單中選擇Add debug information.
start debugger(F9)開始我們的測試,Run(Ctrl+R)
隨時在varible List中輸入我們想查看的變數
其它:
Step into(Ctrl+N):單步調試,進入下一步
Step over(Ctrl+O):結束該語句
Step out(Ctrl+T):跳出該過程
Run to next exception:進入下一個斷點Breakpoint
Toggle Breakpoint設置斷點:游標指向一行,Ctrl+B;或滑鼠點中該行的行號邊緣
--引用自網頁鏈接
3. 如何調試存儲過程和package
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. 如何在PLSQL中測試我自己寫的存儲過程
1、所謂的存儲過程,它的意義就是在伺服器上運行的SQL代碼。可以通過PL SQL聯接伺服器來進行調試。
2、PL SQL聯接伺服器後,找到相應的存儲過程,點右鍵點運行即可進行測試,會彈出對話讓你填入需要代入的參數。
3、如果伺服器上還沒有建立相關存儲過程,你要做的當然是使用SQL語句先進行建立。
5. 存儲過程 如何調試
最簡單 先在查詢器裡面調試 。完全正確了 才寫成存儲過程!
6. 這個存儲過程如何測試
CREATE PROCEDURE [dbo].[Test]
@TableName char(10),
@TableValue bigint
AS
DECLARE @sql nvarchar(4000)
BEGIN
SET NOCOUNT ON;
--如果TableName表存在則插入一條TableValue
SET @sql=
N'if exists
(select * from sysobjects
where id = object_id(N''[dbo].['+@TableName+']'')
and OBJECTPROPERTY(id, N''IsUserTable'') = 1)
INSERT INTO '+@TableName+'(TableValue) VALUES(cast('+@TableValue+') as nvarchar(20))'
EXEC sp_executesql @sql,N'@TableName char(10),@TableValue bigint',
@TableName,@TableValue
END
7. PL/SQL中測試存儲過程,如何立即輸出DBMS_OUTPUT的語句。
要想立即輸出就把過程分開一個一個調用。
這樣一起調用的匿名塊,肯定要等程序執行完才一起輸出。
8. sql server測試存儲過程
你沒必要定義output類型,因為最後的select語句已經把你要的結果輸出了
除了實際運行看數據,別的也沒什麼號驗證的了,如果語法不對,創建時就失敗了
exec Get_operator @Czy_code=『code』,@Czy_password='pwd'
執行以下看結果嘍
另外查詢裡面沒必要用事務,可以去掉transaction
9. 存儲過程的測試一直在執行,關不掉
1、存儲過程中是否有 LOOP ?
如果有 的在end loop 添加 EXIT WHEN 游標名%NOTFOUND (意思是如果沒有這個游標,就跳出)
2、沒有loop 的話
手動停止掉當前的存儲過程吧。語句如下:
--先查運行的存儲過程sid
select /*rule*/ sid from v$access where object='存儲過程名'
--通過sid 找到serial
select sid ,serial#,paddr from v$session where sid='上一句查到的sid'
--kill 掉存儲過程
alter system kill session 'sid','serial#'
10. 存儲過程並行測試,如何並發測試
這個問題一般是數據鎖造成的,INSERT的時候一般不會遇到這種問題,你在A或者B存儲過程中查看一下,一定有UPDATE語句或者 SELECT FOR UPDATE語句,兩個並發的請求同時鎖一條記錄就會造成一條成功另一條失敗。
不過按照你的描述最大的可能性是另外一種情況,就是兩次INSERT插入的數據某個欄位是相同的值,好死不死的,這個相同值的欄位又設置了唯一索引或者約束,那麼當第一條記錄插入成功後第二條記錄就會必然失敗回滾。