Oracle PL/SQL创建DeptRecord复合类型接收用户输入插入数据表
Oracle PL/SQL DeptRecord复合类型插入实现方案
原有实现存在的问题:
- 定义的DEPTRECORD复合类型及实例化变量未被实际使用,不符合需求要求的复合类型调用逻辑
- 插入语句重复声明&替换变量,会触发用户重复输入3次参数,且手动拼接字符串引号容易因输入内容包含特殊字符触发语法错误
- 缺失异常处理逻辑,插入报错时事务不会自动回滚,无错误提示
正确实现代码
SET SERVEROUTPUT ON; DECLARE -- 定义DeptRecord复合类型 TYPE DEPTRECORD IS RECORD ( IDEPTNO NUMBER := &deptno, SDEPTNAME VARCHAR2(150) := '&deptname', SDEPTLOC VARCHAR2(150) := '&deptloc' ); -- 实例化复合类型变量,此时仅触发一次用户参数输入 DEP_REC DEPTRECORD; BEGIN -- 直接从复合类型变量中取值插入表,无需重复请求用户输入 INSERT INTO department(deptno, deptname, deptloc) VALUES (DEP_REC.IDEPTNO, DEP_REC.SDEPTNAME, DEP_REC.SDEPTLOC); COMMIT; DBMS_OUTPUT.PUT_LINE('部门信息插入成功,部门编号:' || DEP_REC.IDEPTNO); EXCEPTION WHEN OTHERS THEN ROLLBACK; DBMS_OUTPUT.PUT_LINE('插入失败,错误信息:' || SQLERRM); END; /
核心修改说明
- 复合类型定义阶段就为字符串类型的替换变量加上单引号,避免后续取值时出现数据类型不匹配问题
- 仅在实例化复合类型变量时触发一次用户输入,所有取值均从已赋值的复合类型变量中获取,无需重复输入
- 插入逻辑直接调用复合类型的属性字段,完全复用了复合类型的定义,符合需求要求
- 增加异常捕获分支,插入出错时自动回滚事务并打印错误原因,方便定位问题
内容的提问来源于stack exchange,提问作者AlbertAlex
相关产品推荐
相关产品推荐

