【Oracle】PL/SQL语法、存储过程,触发器
在Oracle数据库中,PL/SQL是一种程序语言,用于编写存储过程、函数、触发器和包等数据库对象。以下是一个简单的PL/SQL存储过程示例,该过程用于更新特定用户的信用额度:
CREATE OR REPLACE PROCEDURE update_credit_limit(p_user_id IN NUMBER, p_new_limit IN NUMBER)
AS
BEGIN
-- 更新用户信用额度的逻辑
UPDATE user_accounts
SET credit_limit = p_new_limit
WHERE user_id = p_user_id;
-- 如果更新了行,则提交更改
IF SQL%ROWCOUNT > 0 THEN
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS THEN
-- 发生异常时回滚更改
ROLLBACK;
-- 可以选择记录异常信息到日志表
RAISE; -- 重新抛出异常
END update_credit_limit;
调用这个存储过程可以使用以下代码:
BEGIN
update_credit_limit(123, 5000);
END;
这里的update_credit_limit
过程接受两个参数:p_user_id
(用户标识)和p_new_limit
(新的信用额度)。它执行一个更新操作,并且使用IF
语句和SQL%ROWCOUNT
属性来处理事务的提交和回滚。
Oracle中的触发器是一种数据库对象,它可以在特定的数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行。以下是一个简单的触发器示例,它用于在向某个表中插入数据时记录日志:
CREATE OR REPLACE TRIGGER log_account_inserts
AFTER INSERT ON user_accounts
FOR EACH ROW
BEGIN
-- 插入日志记录的逻辑
INSERT INTO account_logs(user_id, action, log_date)
VALUES(:NEW.user_id, 'INSERT', SYSDATE);
END log_account_inserts;
这个触发器在每次向user_accounts
表中插入新记录时执行,并且将关于这次插入的信息记录到account_logs
表中。AFTER INSERT
表示触发器在插入操作完成后执行,:NEW.user_id
代表新插入行的user_id
列的值。
评论已关闭