创建存储过程tran_save,首先开始事务,向course表中添加一条记录,设置保存点sp01,然后再删除该记录,并回滚到事务保存点sp01处,最后提交事务。执行存储过程tran_save,验证course表中的记录是否插入成功
时间: 2023-08-12 21:06:53 浏览: 293
可以使用以下 SQL 代码创建存储过程 tran_save,实现上述要求:
```
CREATE PROCEDURE tran_save
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRANSACTION;
-- 向course表中添加一条记录
INSERT INTO course (course_name, course_desc)
VALUES ('Math', 'Mathematics course');
-- 设置保存点sp01
SAVE TRANSACTION sp01;
-- 删除刚才添加的记录
DELETE FROM course WHERE course_name = 'Math';
-- 回滚到事务保存点sp01处
ROLLBACK TRANSACTION sp01;
-- 提交事务
COMMIT TRANSACTION;
END
```
执行存储过程 tran_save 可以使用以下代码:
```
EXEC tran_save;
```
执行后可以通过以下代码验证 course 表中是否有 Math 课程记录:
```
SELECT * FROM course WHERE course_name = 'Math';
```
如果 Math 课程记录不存在,则说明存储过程 tran_save 正确执行了事务回滚操作。
相关问题
如何从字符串 "INSERT OVERWRITE TABLE HDQRY.TEMP_SZQQ2020_19072_XT SELECT T.tran_cusm_no ,'汇出' AS TRAN_TYPE FROM ORAMIS.CTIS_TXN_TIF_BAS_P_F T WHERE T.rel_payee_name REGEXP '信托' GROUP BY T.tran_cusm_no UNION ALL SELECT T.tran_cusm_no ,'汇入' AS TRAN_TYPE FROM ORAMIS.ctis_txn_tif_bas_p_f T WHERE T.rel_pay_name REGEXP '信托' GROUP BY T.tran_cusm_no ;--EOF|STEP-1(INSERT-HDQRY.TEMP_SZQQ2020_19072_XT OK)" 中匹配出 "SELECT T.tran_cusm_no ,'汇出' AS TRAN_TYPE FROM ORAMIS.CTIS_TXN_TIF_BAS_P_F T WHERE T.rel_payee_name REGEXP '信托' GROUP BY T.tran_cusm_no" 和 "SELECT T.tran_cusm_no ,'汇入' AS TRAN_TYPE FROM ORAMIS.ctis_txn_tif_bas_p_f T WHERE T.rel_pay_name REGEXP '信托' GROUP BY T.tran_cusm_no"
你可以使用正则表达式来匹配所需字符串。以下是匹配的正则表达式和代码:
```python
import re
s = "INSERT OVERWRITE TABLE HDQRY.TEMP_SZQQ2020_19072_XT SELECT T.tran_cusm_no ,'汇出' AS TRAN_TYPE FROM ORAMIS.CTIS_TXN_TIF_BAS_P_F T WHERE T.rel_payee_name REGEXP '信托' GROUP BY T.tran_cusm_no UNION ALL SELECT T.tran_cusm_no ,'汇入' AS TRAN_TYPE FROM ORAMIS.ctis_txn_tif_bas_p_f T WHERE T.rel_pay_name REGEXP '信托' GROUP BY T.tran_cusm_no ;--EOF|STEP-1(INSERT-HDQRY.TEMP_SZQQ2020_19072_XT OK)"
matches = re.findall(r"(SELECT\s+.*?GROUP\s+BY\s+\w+\.\w+)", s, re.IGNORECASE)
print(matches)
```
输出结果为:
```
["SELECT T.tran_cusm_no ,'汇出' AS TRAN_TYPE FROM ORAMIS.CTIS_TXN_TIF_BAS_P_F T WHERE T.rel_payee_name REGEXP '信托' GROUP BY T.tran_cusm_no", "SELECT T.tran_cusm_no ,'汇入' AS TRAN_TYPE FROM ORAMIS.ctis_txn_tif_bas_p_f T WHERE T.rel_pay_name REGEXP '信托' GROUP BY T.tran_cusm_no"]
```
解释一下正则表达式:
- `(SELECT\s+.*?GROUP\s+BY\s+\w+\.\w+)`: 匹配以SELECT开头,以GROUP BY加至少一个单词字符加一个点号加至少一个单词字符结尾的字符串,其中SELECT和GROUP BY可以是大小写混合的,且.*?表示非贪婪匹配,即尽可能少的匹配字符。`\s+`表示匹配至少一个空格,`\w+\.\w+`表示匹配一个或多个单词字符加一个点号加一个或多个单词字符。
希望这个代码对你有所帮助!
根据以下字段生成oracle建表语句:appg_mode|appg_date|tran_code|bancs_no|rgnbnk|tran_cusm_no|tran_date|inct_rec_no|rec_no|prov_br_no|acct_no|tran_acct_type
根据以下字段生成的Oracle建表语句如下:CREATE TABLE T_TRANS_INFO(appg_mode VARCHAR2(20) NOT NULL,appg_date DATE NOT NULL,tran_code VARCHAR2(20) NOT NULL,bancs_no VARCHAR2(20) NOT NULL,rgnbnk VARCHAR2(20) NOT NULL,tran_cusm_no VARCHAR2(20) NOT NULL,tran_date DATE NOT NULL,inct_rec_no VARCHAR2(20) NOT NULL,rec_no VARCHAR2(20) NOT NULL,prov_br_no VARCHAR2(20) NOT NULL,acct_no VARCHAR2(20) NOT NULL,tran_acct_type VARCHAR2(20) NOT NULL);
阅读全文