automated save and generated infopath file name

本文介绍如何在 InfoPath 中设置表单提交后自动生成特定格式的文件名。通过新建两个域,并设置数据连接及函数,最终实现提交数据到文档库时按“AAA-BBB”格式自动命名。

 

 

1.       infoPath表单中,新建2个域。然后选择数据连结,如图:

 

2.       下一步。

 

 

 

3.       选择fx.选择插入函数。并选择文本contact.如图:

 

 

4.       选择域,

 

 

 

 

5.       对提交建立数据连结如图:

 

 

6.最后放到表单文档库中,提交数据后,系统自动生成文件名“AAA-BBB”。

<think>我们正在讨论Oracle数据库中的命名概念。用户询问"GENERATED NAME"和"USER NAME"的区别。根据Oracle的命名规则,我们需要区分系统生成的名称和用户自定义名称。 在Oracle中,当我们创建约束、索引等对象时,如果不显式指定名称,Oracle会自动生成一个系统名称(GENERATED NAME)。而用户自定义名称(USER NAME)则是创建时由用户指定的名称。 具体到约束: - 如果创建表时指定约束但不命名,例如: ```sql CREATE TABLE employees ( emp_id NUMBER NOT NULL, -- 未命名非空约束 emp_name VARCHAR2(50) ); ``` 此时Oracle会自动生成一个约束名,格式为`SYS_Cn`(n为数字),如`SYS_C00276260`。这就是GENERATED NAME。 - 如果用户显式命名约束: ```sql CREATE TABLE employees ( emp_id NUMBER CONSTRAINT nn_emp_id NOT NULL, emp_name VARCHAR2(50) ); ``` 这里的`nn_emp_id`就是USER NAME。 同样,索引、触发器等对象也有类似机制。 两者的主要区别: | 特征 | GENERATED NAME (系统生成名) | USER NAME (用户定义名) | |------------------|-----------------------------------|-----------------------------------| | 命名规则 | 格式固定,如`SYS_Cn`(约束)或`SYS_IL...`(LOB索引)等 | 用户自定义,需符合命名规范 | | 可读性 | 无意义,难以记忆 | 通常具有描述性(如`pk_emp_id`) | | 维护便利性 | 较差(需查数据字典) | 较好(可直接使用有意义的名称) | | 是否允许重名 | 不会与其他系统生成名重名 | 在同一命名空间内必须唯一 | | 修改方式 | 无法直接修改,只能删除后重建 | 可通过`ALTER ... RENAME TO`修改 | 示例:查询约束名称 ```sql SELECT constraint_name, constraint_type, search_condition FROM user_constraints WHERE table_name = 'EMPLOYEES'; ``` 输出可能包含: ``` CONSTRAINT_NAME CONSTRAINT_TYPE SEARCH_CONDITION ---------------- ---------------- ----------------- SYS_C00276260 C "EMP_ID" IS NOT NULL -- 系统生成名 NN_EMP_ID C "EMP_ID" IS NOT NULL -- 用户定义名 ``` 注意事项: 1. **系统生成名的前缀**:不同对象类型前缀不同: - 约束:`SYS_C` - 索引:`SYS_`(如`SYS_FK0000123456`) - LOB索引:`SYS_IL...` 2. **重命名系统生成名**:可以使用`ALTER TABLE`语句重命名约束: ```sql ALTER TABLE employees RENAME CONSTRAINT SYS_C00276260 TO nn_emp_id; ``` 3. **最佳实践**:建议始终显式命名约束,以提高可维护性。 引用说明:在Oracle安装过程中会创建默认用户(如SYSTEM和SYS),这些用户的名称是预定义的,属于USER NAME的范畴,但它们是系统内置的用户名,不是对象名[^1]。而tnsnames.ora文件中的网络服务名也是用户自定义的,属于USER NAME[^2]。 总结:GENERATED NAME是Oracle自动生成的唯一标识符,而USER NAME是用户为数据库对象指定的有意义的名称。 §§相关问题§§ 1. 如何查询Oracle中所有系统生成的约束名? 2. 重命名系统生成的约束名有什么风险? 3. 在创建表时如何避免使用系统生成的名称?</think>在Oracle数据库中,**GENERATED NAME**(系统生成名)和**USER NAME**(用户定义名)是两种不同的对象命名机制,主要区别如下: ### 一、核心区别对比 | **特征** | GENERATED NAME (系统生成名) | USER NAME (用户定义名) | |------------------|---------------------------------------------|-----------------------------------| | **命名主体** | Oracle系统自动生成 | 用户/开发者显式指定 | | **命名规则** | 固定前缀+数字序列(如`SYS_C00276260`) | 自由定义(需符合命名规范) | | **可读性** | 无业务含义,仅作唯一标识 | 可包含业务语义(如`PK_EMP_ID`) | | **修改权限** | 仅Oracle可修改 | 用户可通过DDL语句修改 | | **典型应用场景** | 未显式命名时的默认命名(约束/索引/LOB等) | 用户主动命名的数据库对象 | ### 二、具体示例说明 1. **系统生成名 (GENERATED NAME)** ```sql CREATE TABLE employees ( emp_id NUMBER NOT NULL, -- 未命名非空约束 name VARCHAR2(50) ); ``` - Oracle自动生成约束名:`SYS_C00276260` - 查询验证: ```sql SELECT constraint_name, constraint_type FROM user_constraints WHERE table_name = 'EMPLOYEES'; ``` ``` CONSTRAINT_NAME CONSTRAINT_TYPE ---------------- ---------------- SYS_C00276260 C -- C=Check约束(含NOT NULL) ``` 2. **用户定义名 (USER NAME)** ```sql CREATE TABLE departments ( dept_id NUMBER CONSTRAINT pk_dept PRIMARY KEY, -- 显式命名 dept_name VARCHAR2(50) NOT NULL ); ``` - 用户自定义主键名:`pk_dept` ### 三、命名空间与影响范围 两种名称共存于同一命名空间,但遵循不同规则: - **系统生成名**: 使用`SYS_`前缀+全局唯一数字(如`SYS_Cnnnnnn`),确保无冲突[^1]。 - **用户定义名**: 需满足: ```markdown 1. 长度1-30字节 2. 以字母开头 3. 仅包含:A-Z, 0-9, _, $, # 4. 不能与保留字冲突 ``` ### 四、最佳实践建议 1. **优先使用USER NAME** ```sql -- 显式命名提高可维护性 ALTER TABLE employees ADD CONSTRAINT uk_emp_email UNIQUE (email); ``` 2. **重命名系统生成对象** ```sql ALTER TABLE employees RENAME CONSTRAINT SYS_C00276260 TO nn_emp_id; ``` 3. **避免混用场景** - 系统名常见于: - 未命名的主键/外键 - LOB字段的自动索引(如`SYS_IL0000123456C00002$$`) - 分区表的系统分区名 ### 五、关键注意事项 1. **系统名不可删除** 只能通过删除关联对象(如列或表)移除 2. **迁移影响** 系统生成名在不同数据库实例中会变化,导致导出/导入脚本失效 3. **性能监控** 在AWR报告中系统名可读性差,建议重命名: ```sql SELECT sql_id, object_name FROM dba_hist_sqlstat WHERE object_name LIKE 'SYS_C%'; -- 难以定位 ``` > **总结**:用户定义名(USER NAME)提供更好的可维护性和可读性,而系统生成名(GENERATED NAME)是Oracle确保对象唯一性的兜底机制。建议始终显式命名关键对象[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值