當前位置:首頁 » 存儲配置 » 存儲過程修改記錄

存儲過程修改記錄

發布時間: 2024-10-10 08:23:28

㈠ oracle 查詢存儲過程什麼時候修改過

USER_OBJECTS這個數據字典裡面有記錄的
SELECT OBJECT_NAME,CREATED,LAST_DDL_TIME FROM USER_OBJECTS WHERE OBJECT_TYPE ='PROCEDURE';

㈡ 啥叫「存儲過程」啊

存儲過程
存儲過程是保存在資料庫中的專門進行數據操作的代碼過程。存儲過程通常與觸發器結合使用,來控制數據的完整性。在打開資料庫時,存儲過程被自動載入到內存中,可以象其他過程文件一樣進行調用。

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命令來修改觸發器。使用命令修改觸發器與建立觸發器時相同。

㈢ mysql存儲過程的if判斷有多個條件該怎麼優化效率

這個應該不會太慢吧,我建議你看一下,你是不是循環做了太多次的插入/更新操作。
mysql默認的配置中,每次事務提交都要寫binlog和redo log,如果循環太多次——比如循環插入10w條記錄——就會非常慢。一般優化思路分兩種:
1 修改 sync_binlog為一個100-1000間的值,讓binlog每隔100-1000個事務後再寫一次;修改innodb_flush_log_at_trx_commit =2; 這么搞的好處是降低了寫log的次數和消耗的時間,缺點是,中間出錯的話,會丟失一部分的binlog和redolog導致無法通過他們來在出問題是恢復生產庫數據。
2 將所有的插入/更新操作放到一個事務中進行。這樣,顯然就只需要一次寫binlong和redolog咯。

㈣ MySQL在原存儲過程中增加update修改記錄行報1064錯誤請教大神

1064是SQL的語法錯誤,最簡單最低級的錯誤而已。
你這個update語句本身就有問題:

UPDATE woic SET seq=comments WHERE seq='000' AND check_passed=0;
這里的comments 應該是傳進來的吧?你如果不傳進來就要給常量。

php5.3執行sql server2005的存儲過程,該怎麼獲取存儲過程的查詢記錄

方法:

1、打開SQLServerManagementStudio並連接到資料庫引擎資料庫。


㈥ 在sql存儲過程中@@rowcount<>0是什麼意思

在SQL存儲過程中,`@@rowcount > 0` 表示上一條執行的SQL語句影響了數據,即有行被修改、刪除或插入。這個變數作為計數器,記錄了上一操作的結果。當`@@rowcount`的值不為零,通常意味著操作執行成功,比如更新或插入操作。

首先,`@@ROWCOUNT`是一個內置的SQL Server系統函數,它返回的是上一條SQL語句對資料庫產生的影響行數。這個值對於跟蹤和驗證操作的執行效果非常有用。如果一個語句沒有改變任何行,比如在`IF`語句中,`@@ROWCOUNT`會被設置為0。

其次,`@@ROWCOUNT`的返回類型是整數,這對於編程時判斷操作是否成功至關重要。例如,在一個存儲過程中,如果執行`UPDATE`語句後,通過檢查`@@ROWCOUNT`是否等於0,你可以確定是否所有更新都成功。

在實際應用中,一個常見的用法是在`UPDATE`或`INSERT`語句後檢查`@@ROWCOUNT`。如果`UPDATE`語句改變了至少一行數據,`@@ROWCOUNT`將大於0,表示操作成功。相反,如果`UPDATE`語句沒有影響任何行,`@@ROWCOUNT`為0,這通常會被視為插入或更新失敗的信號。

總的來說,`@@rowcount > 0`在存儲過程中是一個重要的條件判斷,它可以幫助開發者確定操作是否按預期執行,從而確保數據的一致性和完整性。

熱點內容
termux如何搭建伺服器 發布:2024-10-10 10:18:05 瀏覽:736
中國石化的電話服務密碼是多少 發布:2024-10-10 10:16:46 瀏覽:41
婚紗店宣傳片視頻腳本 發布:2024-10-10 10:08:55 瀏覽:868
android寫入文件 發布:2024-10-10 10:08:11 瀏覽:434
怎麼打開文件夾的路徑 發布:2024-10-10 10:08:06 瀏覽:60
ec伺服器怎麼有小提示 發布:2024-10-10 10:08:04 瀏覽:494
我的世界迪士尼神奇寶貝伺服器地址 發布:2024-10-10 09:03:02 瀏覽:559
win7存儲並顯示 發布:2024-10-10 09:02:30 瀏覽:552
oracle資料庫導出 發布:2024-10-10 08:34:56 瀏覽:364
androidn特性 發布:2024-10-10 08:30:41 瀏覽:730