Ⅰ oracle怎麼查詢存儲過程有沒有被執行過
1、在存儲過程中加一個輸出參數,執行完存儲過程後,判斷輸出參數的值; 2、查看存儲過程中處理數據後,你要的效果達到沒有。
Ⅱ sqlserver2000將存儲過程的內容輸出到日誌文件
1、按照你的思路(一個存儲過程是將一張表的數據同步到另一張表)來做的話,只能在存儲過程後增加一個Log的表,寫入此次同步的情況,然後程序再獲得同步的情況顯示給客戶。
2、其實資料庫同步問題,建議你還是用SQL的復制與分發功能,此功能絕對保障數據同步的准確性
Ⅲ 創建oracle存儲過程,要求把一個表的數據導入另一個表中然後刪除原表且要有異常處理和日誌輸出
又是你呀,我再把代碼改改,很簡單,代碼如下
create or replace procere test
is
begin
--兩個表欄位一樣
insert into 表名1 select * from 表名2;
--欄位不一樣
insert into 表名1(欄位1,欄位2,欄位3) select 欄位1,欄位2,欄位3 from 表名2;
--刪除原表數據
delete 表名2
或者
TRUNCATE TABLE 表名2
COMMIT;
WHEN OTHERS THEN --當運行出現異常
dbms_output.put_line(SQLERRM(SQLCODE));--輸出到控制台
end
Ⅳ 如何在存儲過程執行中,利用dbms
dbms_output.put_line本身就是這么設計、這么用的,要實時輸出日誌,可以把日誌通過UTL_FILE包寫到文件
中。
dbms_output在10g之前能輸出的最大字元是1000000,單行長度是255,
dbms_output在10g中輸出和單行限制都被取消了.
Ⅳ oracle中怎麼用存儲過程將的存儲過程的執行時間返回出去。
可以在日誌表中加一個運行時間欄位,可以在程序運行之前設定一定變數值為sysdate,程序運行結尾出一個變數2 sysdate , 兩個變數相減就可以得到過程運行時間.
begin
v_date1:= sysdate;
...
v_date2:=sysdate;
v_run_num=v_date2-v_dat1;
insert into 日誌表(run_num_time) values(v_run_num);
commit;
Ⅵ oracle存儲過程如何輸出信息
可用DBMS_OUTPUT.PUT_LINE()對存儲過程的進行輸出。
編寫存儲過程:
create or replace procere test_pro(in_num number)
as
M number;
begin
M := in_num;
if 0 < M then
dbms_output.put_line('輸出SQL語句1');
elsif M < 3 then
dbms_output.put_line('輸出SQL語句2');
else
dbms_output.put_line('nothing');
end if;
end;
(6)設置存儲過程輸出日誌擴展閱讀;
存儲在資料庫的數據字典中,存儲在當前的應用中安全性由資料庫提供安全保證,必須通過授權才能使用存儲子程序,安全性靠應用程序來保證,如果能執行應用程序,就能執行該子程序。模式描述IN參數用來從調用環境中向存儲過程傳遞值,不能給IN參數賦值,給此參數傳遞的值可以是常量、有值的變數、表達式等。
Ⅶ ORACLE 的存儲過程中如何輸出日誌文件
直接利用UTL_FILE包來生成文件
UTL_FILE.fopen 創建文件
UTL_FILE.put 寫入數據
UTL_FILE.new_line 換行
UTL_FILE.fclose 關閉文件
Ⅷ 啥叫「存儲過程」啊
存儲過程
存儲過程是保存在資料庫中的專門進行數據操作的代碼過程。存儲過程通常與觸發器結合使用,來控制數據的完整性。在打開資料庫時,存儲過程被自動載入到內存中,可以象其他過程文件一樣進行調用。
1.建立存儲過程
可以在項目管理器中選擇建立或修改存儲過程。在項目管理器的Data選項卡中選定Stored Proceres節點,然後單擊New、Add或Modify按鈕都將打開存儲過程文本編輯器,如圖7-12所示。
也可以在首先打開資料庫的情況下,執行MODIFY STRUCTURE命令打開存儲過程文本編輯器。如:
OPEN DATABASE dbMyData
MODIFY STRUCTURE
一個資料庫的所有存儲過程包含在一個文件中,過程使用PROCEDURE語句聲明,這與一般的過程文件是完全一樣的。
例如,下面為資料庫建立了一個名為NewStuId的存儲過程,該過程為學生檔案表的StuId欄位根據當前StuId中的最大值自動生成一個編號,並保存到StuId欄位中中,如圖7-13所示。
圖7-12 可以在項目管理器選擇建立或修改存儲過程
圖7-13 NewStuId存儲過程
執行下面的代碼,將在學生檔案表中添加一條新記錄,並為StuId欄位賦值。
APPEND BLANK
NewStuId() &&執行存儲過程
需要注意的是,如果准備存儲過程用於表的觸發器,則不能包含如圖7-13中所示的CALCULATE、GO和REPLACE這些引起記錄移動的命令。
2.從文本文件中導入存儲過程
可以使用APPEND PROCEDURES命令將文本文件中的存儲過程以編程的方式添加到當前資料庫中,其語法格式如下:
APPEND PROCEDURES FROM FileName [AS nCodePage] [OVERWRITE]
其中,FileName指定保存存儲過程的文本文件名稱;AS nCodePage指定要追加其存儲過程的文本文件要轉換的代碼頁;OVERWRITE指定用文本文件中的過程改寫資料庫中的當前存儲過程,如果不包含此參數,文本文件中的存儲過程將追加到當前存儲過程中。
需要注意的是,在使用該命令前,資料庫必須以獨占方式打開並設置為當前資料庫。
3.將存儲過程導出到文本文件中
可以使用COPY PROCEDURES命令將當前資料庫中的存儲過程導出到文本文件,其語法格式如下:
COPY PROCEDURES TO FileName [AS nCodePage] [ADDITIVE]
其中,FileName指定文本文件名,存儲過程將被復制到此文本文件中;AS nCodePage指定文本文件的代碼頁;ADDITIVE指定將存儲過程追加到指定文本文件尾,如果若省略該參數,則覆蓋文本文件的內容。
4.查看資料庫中的存儲過程
可以使用DISPLAY PROCEDURES或LIST PROCEDURES命令顯示當前資料庫中的存儲過程名稱,二者的功能基本相同。其中,DISPLAY PROCEDURES命令的語法格式如下:
DISPLAY PROCEDURES [TO PRINTER [PROMPT] | TO FILE FileName] [NOCONSOLE]
其中,TO PRINTER [PROMPT]指定將顯示結果輸出到列印機中,包含PROMPT子句可以在列印開始前顯示一個列印對話框;TO FILE FileName指定將顯示結果輸出到FileName指定的文件中;NOCONSOLE指定不向Visual FoxPro主窗口或活動的用戶自定義窗口輸出。
例如,下面的代碼將顯示dbMyData資料庫中的存儲過程名稱。
OPEN DATABASE dbMyData
DISPLAY PROCEDURES
7.3.6 設置觸發器
觸發器是綁定在表上的表達式,當表中的任何記錄被指定的操作命令修改時,觸發器被激發。當數據修改時,觸發器可執行資料庫應用程序要求的任何其他操作。
觸發器作為特定表的屬性來創建和存儲。如果從資料庫中移去一個表,則同時刪除和該表相關聯的觸發器。從前面的表7-7可以看出,觸發器是在進行了其他所有檢查之後(如有效性規則、主關鍵字的實施,以及NULL值的實施)被激活,位於所有約束的最後面。並且與欄位級規則和記錄級規則不同,觸發器不對緩沖數據起作用。
1.建立觸發器
可以使用表設計器或CREATE TRIGGER命令來創建觸發器。對於每個表,可為插入、更新及刪除3個事件各創建一個觸發器。在任何情況下,一個表最多隻能有3個觸發器。觸發器必須返回「真」(.T.)或「假」(.F.),只有返回「真」時操作才能繼續進行。能夠激發觸發器的命令如表7-9所示。
表7-9 能夠激發觸發器的命令
觸發器
命令
刪除觸發器
DELETE命令
插入觸發器
APPEND FROM、APPEND FROM ARRAY、APPEND BLANK、IMPORT、INSERT-SQL和RECALL命令
序表
觸發器
命令
更新觸發器
GATHER、REPLACE、REPLACE FROM ARRAY和UPDATE SQL命令
需要注意的是,不能對有觸發器的表使用INSERT命令,但是可以使用INSERT-SQL命令;發出PACK或ZAP不會激發任何觸發器;如果更新具有刪除標記的記錄,不會激發觸發器;如果表使用了緩沖模式,只有當使用TABLEUPDATE( )函數進行發送更新時,才激發更新觸發器。
下面是在dbMyData資料庫中建立的4個存儲過程。其中,InsertData用於在添加記錄時顯示一個「新增記錄…」提示;UpdateData用於在記錄更新時自動將更新記錄寫入到一個日誌表tblStudent2中,來記錄用戶對學生檔案表所做的修改;DeleteData用於在刪除記錄時顯示一個信息框,詢問用戶是否確認刪除記錄;WriteLog用於寫入日誌,該過程可以接收來自UpdateData過程的參數傳入值。
PROCEDURE WriteLog
PARAMETERS lcStuId,lcStuName,lcClassName,ldEnterDate,lnChinese,lnMaths,lnTotal
*!* 將變動寫入到日誌表tblStuden2中
INSERT INTO tblStudent2 (StuId,StuName,ClassName,EnterDate,Chinese,Maths,Total) ;
VALUES (lcStuId,lcStuName,lcClassName,ldEnterDate,lnChinese,lnMaths,lnTotal)
PROCEDURE InsertData
WAIT WINDOW "新增記錄..." NOWAIT TIMEOUT 2
RETURN .T.
PROCEDURE UpdateData
WAIT WINDOW "正在將變動寫入日誌表..." NOWAIT TIMEOUT 2
WriteLog(StuId,StuName,ClassName,EnterDate,Chinese,Maths,Total)
RETURN .T.
PROCEDURE DeleteData
IF MESSAGEBOX("確認刪除該記錄嗎?",4+32," 提示")=6
RETURN .T.
ELSE
RETURN .F.
ENDIF
打開表設計器,在Table選項卡的Insert trigger、Update trigger和Delete trigger文本框中分別輸入InsertData()、UpdateData()和DeleteData(),如圖7-14所示。
圖7-14 為表建立觸發器
也可以使用CREATE TRIGGER命令為表建立觸發器表達式,該命令的語法格式如下:
CREATE TRIGGER ON TableName FOR DELETE | INSERT | UPDATE AS lExpression
其中,TableName是要建立觸發器的表名稱,lExpression是觸發器表達式。例如,下面使用該命令為學生檔案表建立了與圖7-14同樣的觸發器表達式。
OPEN DATABASE dbMyData
CREATE TRIGGER ON 學生檔案表 FOR INSERT AS InsertData() &&建立插入觸發器
CREATE TRIGGER ON 學生檔案表 FOR UPDATE AS UpdateData() &&建立更新觸發器
CREATE TRIGGER ON 學生檔案表 FOR DELETE AS DeleteData() &&建立刪除觸發器
2.刪除觸發器
可以在表設計器的Table選項卡中刪除觸發器或使用DELETE TRIGGER命令從資料庫表中刪除觸發器。其中,DELETE TRIGGER命令的語法格式如下:
DELETE TRIGGER ON TableName FOR DELETE | INSERT | UPDATE
其中,TableName是要刪除觸發器的表名稱。
例如,下面的代碼將刪除學生檔案表中的插入觸發器。
DELETE TRIGGER ON 學生檔案表 FOR INSERT
3.修改觸發器
可以在表設計器的Table選項卡中或者使用CREATE TRIGGER命令來修改觸發器。使用命令修改觸發器與建立觸發器時相同。
Ⅸ DB2存儲過程執行中怎麼列印日誌
print "a=92"
Ⅹ SQL Server 2008 R2存儲過程中怎麼輸出調試日誌信息
使用PRINT一般是寫程序時觀察中間結果,對於你說的這種情況,可以直接用SELECT輸出結果,在存儲過程里也可以這樣。如果是在函數或者觸發器里,可以建個測試表,如果是表值函數則可以定義一個表變數。
如果一定要print,那麼這樣吧:
delcare @number int
declare @course nvarchar(30) --for example
select @number=number,@course=course from choice where studentnumber = '20100001'
print @number
print @course
這是樓上的朋友的勞動成果,望勿見怪
如果一定要PRINT全部的,那麼用游標吧:
declare @info varchar(200)
declare @curs cursor
set @curs=cursor scroll dynamic
for
select 'number='+convert(varchar(20),number)+'; course='+convert(varchar(20),course) from choice where sex='F'
open @curs
fetch next from @curs into @info
while(@@fetch_status=0)
begin
print @info
fetch next from @curs into @info
end