华为云用户手册

  • tee_lt(byteawithoutorderwithequalcol, byteawithoutorderwithequalcol) 描述:比较byteawithoutorderwithequalcol和byteawithoutorderwithequalcol数据是否是小于关系,如果是则返回true,否则返回false。分布式不支持使用该函数。 参数类型:byteawithoutorderwithequalcol, byteawithoutorderwithequalcol 返回值类型:bool
  • tee_le(byteawithoutorderwithequalcol, byteawithoutorderwithequalcol) 描述:比较byteawithoutorderwithequalcol和byteawithoutorderwithequalcol数据是否是小于等于关系,如果是则返回true,否则返回false。分布式不支持使用该函数。 参数类型:byteawithoutorderwithequalcol, byteawithoutorderwithequalcol 返回值类型:bool
  • tee_calculation(byteawithoutorderwithequalcol, byteawithoutorderwithequalcol) 描述:byteawithoutorderwithequalcol类型之间的数学运算通用函数。分布式不支持使用该函数。 参数类型:byteawithoutorderwithequalcol, byteawithoutorderwithequalcol 返回值类型:byteawithoutorderwithequalcol
  • ce_decrypt_deterministic(byteawithoutorderwithequalcol, oid) 描述:将密态等值结构的密文解密至text类型的明文数据,密钥oid为系统表 gs_column_keys中的column_key_distributed_id。当前版本暂不支持。 参数类型:byteawithoutorderwithequalcol, oid 返回值类型:text
  • byteawithoutorderwithequalcolne(byteawithoutorderwithequalcol, byteawithoutorderwithequalcol) 描述:比较两个byteawithoutorderwithequalcol类型的数据是否不相同,不相同则返回true,否则返回false。 参数类型:byteawithoutorderwithequalcol, byteawithoutorderwithequalcol 返回值类型:bool
  • tee_like(byteawithoutorderwithequalcol, byteawithoutorderwithequalcol) 描述:byteawithoutorderwithequalcol数据之间是否符合模糊匹配关系,如果是则返回true,否则返回false。分布式不支持使用该函数。 参数类型:byteawithoutorderwithequalcol, byteawithoutorderwithequalcol 返回值类型:bool
  • 示例 byteawithoutorderwithequalcolin、byteawithoutorderwithequalcolout等密态等值函数为数据库内核中数据类型byteawithoutorderwithequalcol指定的in、out、send、recv等读写格式转换函数,具体可参考bytea类型的byteain、byteaout等函数,但会对本地的cek进行验证,需要密文字段中有本地存在的cekoid才能执行成功。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -- 例如存在加密表int_type,int_col2为其加密列。 -- 使用非密态客户端连接数据库,查询加密列密文。 gaussdb=# SELECT int_col2 FROM int_type; int_col2 ------------------------------------------------------------------------------------------------------------------------------------------------------ \x01c35301bf421c8edf38c34704bcc82838742917778ccb402a1b7452ad4a6ac7371acc0ac33100000035fe3424919854c86194f1aa5bb4e1ca656e8fc6d05324a1419b69f488bdc3c6 (1 row) -- 将加密列密文当做byteawithoutorderwithequalcolin入参,格式从cstring输入转码转化成内部byteawithoutorderwithequalcol形式。 gaussdb=# SELECT byteawithoutorderwithequalcolin('\x01c35301bf421c8edf38c34704bcc82838742917778ccb402a1b7452ad4a6ac7371acc0ac33100000035fe3424919854c86194f1aa5bb4e1ca656e8fc6d05324a1419b69f488bdc3c6'); byteawithoutorderwithequalcolin ------------------------------------------------------------------------------------------------------------------------------------------------------ \x01c35301bf421c8edf38c34704bcc82838742917778ccb402a1b7452ad4a6ac7371acc0ac33100000035fe3424919854c86194f1aa5bb4e1ca656e8fc6d05324a1419b69f488bdc3c6 (1 row) 由于byteawithoutorderwithequalcolin等的实现会对cek进行查找,并且判断是否为正常加密后的数据类型。 因此如果用户输入数据的格式不是加密后的数据格式,并且在本地不存在对应cek的情况下,会返回错误。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 gaussdb=# SELECT * FROM byteawithoutorderwithequalcolsend('\x907219912381298461289346129'::byteawithoutorderwithequalcol); ERROR: cek with OID 596711794 not found LINE 1: SELECT * FROM byteawithoutorderwithequalcolsend('\x907219912... ^ gaussdb=# SELECT * FROM byteawithoutordercolout('\x90721901999999999999912381298461289346129'); ERROR: cek with OID 2566986098 not found LINE 1: SELECT * FROM byteawithoutordercolout('\x9072190199999999999... gaussdb=# SELECT * FROM byteawithoutorderwithequalcolrecv('\x90721901999999999999912381298461289346129'::byteawithoutorderwithequalcol); ERROR: cek with OID 2566986098 not found ^ gaussdb=# SELECT * FROM byteawithoutorderwithequalcolsend('\x90721901999999999999912381298461289346129'::byteawithoutorderwithequalcol); ERROR: cek with OID 2566986098 not found LINE 1: SELECT * FROM byteawithoutorderwithequalcolsend('\x907219019... ^
  • byteawithoutorderwithequalcolcmpbytear(byteawithoutorderwithequalcol, bytea) 描述:比较byteawithoutorderwithequalcol和bytea数据大小,若第一个参数小于第二个参数,返回-1;若等于,返回0;若大于,则返回1。 参数类型:byteawithoutorderwithequalcol, bytea 返回值类型:int4
  • byteawithoutorderwithequalcolcmp(byteawithoutorderwithequalcol, byteawithoutorderwithequalcol) 描述:比较两个byteawithoutorderwithequalcol类型的数据大小,若第一个参数小于第二个参数,返回-1;若等于,返回0;若大于,则返回1。 参数类型:byteawithoutorderwithequalcol, byteawithoutorderwithequalcol 返回值类型:int4
  • byteawithoutorderwithequalcoleq(byteawithoutorderwithequalcol, byteawithoutorderwithequalcol) 描述:比较两个byteawithoutorderwithequalcol类型的数据是否相同,相同则返回true,否则返回false。 参数类型:byteawithoutorderwithequalcol、byteawithoutorderwithequalcol 返回值类型:bool
  • byteawithoutorderwithequalcolcmpbyteal(bytea, byteawithoutorderwithequalcol) 描述:比较bytea和byteawithoutorderwithequalcol数据大小,若第一个参数小于第二个参数,返回-1;若等于,返回0;若大于,则返回1。 参数类型:bytea、byteawithoutorderwithequalcol 返回值类型:int4
  • PG_GTT_RELSTATS PG_GTT_RELSTATS视图可用来查看当前会话所有全局临时表的基本信息,调用pg_get_gtt_relstats()函数。继承自集中式全局临时表,分布式全局临时表在CN上查询结果不具有参考价值,DN上查询结果为空,因此不建议在分布式上使用。 表1 PG_GTT_RELSTATS字段 名称 类型 描述 schemaname name schema名称。 tablename name 全局临时表名称。 relfilenode oid 文件对象的ID。 relpages integer 全局临时表的磁盘页面数。 reltuples real 全局临时表的记录数。 relallvisible integer 被标识为全可见的页面数。 relfrozenxid xid 该表中所有在这个之前的事务ID已经被一个固定的(frozen)事务ID替换。 relminmxid xid 预留接口,暂未启用。 父主题: 其他系统视图
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 --创建安全标签sec_label。 gaussdb=# CREATE SECURITY LABEL sec_label 'L1:G4'; --创建安全标签sec_label,安全标签内容为'L1:G2,G4'。 gaussdb=# CREATE SECURITY LABEL sec_label 'L1:G2,G4'; ERROR: security label "sec_label" already exists --创建安全标签sec_label1,安全标签内容为'L1:G2,G4'。 gaussdb=# CREATE SECURITY LABEL sec_label1 'L1:G2,G4'; --创建安全标签sec_label2,安全标签内容为'L3:G1-G5'。 gaussdb=# CREATE SECURITY LABEL sec_label2 'L3:G1-G5'; --查看系统中已创建好的安全标签。 gaussdb=# SELECT * FROM gs_security_label; label_name | label_content ------------+--------------- sec_label | L1:G4 sec_label1 | L1:G2,G4 sec_label2 | L3:G1-G5 (3 rows) --删除已存在的安全标签sec_label、sec_label1、sec_label2。 gaussdb=# DROP SECURITY LABEL sec_label; gaussdb=# DROP SECURITY LABEL sec_label1; gaussdb=# DROP SECURITY LABEL sec_label2; --再次查看系统中已创建好的安全标签。 gaussdb=# SELECT * FROM gs_security_label; label_name | label_content ------------+--------------- (0 rows)
  • 参数说明 label_name 安全标签名称,需在数据库内唯一。 取值范围:字符串,要符合标识符命名规范,且最大长度不超过63个字符。若超过63个字符,数据库会截断并保留前63个字符当作安全标签名称。当安全标签名称中包含大写字母时数据库会自动转换为小写字母,如果需要创建包含大写字母的安全标签名称则需要使用双引号括起来。 标识符需要为小写字母(a~z)、大写字母(A~Z)、下划线(_)、数字(0~9)或美元符号($),且必须以字母或下划线开头。 label_content 安全标签内容,要求如下: 安全标签由等级和范围两部分组成,两者中间用冒号分隔,形式如:等级类别:范围类别,其中等级类别有且仅由一个等级组成,范围类别可由多个范围组成,但至少需要有一个范围,例如“L1:G2,G41,G6-G27”。 等级分类中有1024个等级,命名为Li,其中1≤i≤1024,等级满足偏序关系(若i ≤ j,则Li ≤ Lj),例如等级L1小于等级L3. 范围分类中有1024个范围,命名为Gi,其中1≤i≤1024,范围之间无法比较大小,但可以进行集合运算,多个范围之间用逗号分隔,连字符表示区间,例如{G2-G5}表示{G2,G3,G4,G5},集合{G1}是集合{G1,G6}的子集。 等级和范围的首字母L和G均为大写;L和G之后至少要有一个数字字符,且第一位非零,不允许出现其他非数字字符;{Gxxx-Gyyy}形式中数字yyy必须大于等于xxx。 不符合要求的等级和范围均为非法输入,系统会报错。 例子: gaussdb=# CREATE SECURITY LABEL sec_label3 'L3:'; //标签内容范围类别至少要有一个才行。 ERROR: in label text "L3:", there at least have one level and one group
  • PG_JOB PG_JOB系统表存储用户创建的定时任务的详细信息,定时任务线程定时轮询PG_JOB系统表中的时间,当任务到期会触发任务的执行,并更新PG_JOB表中的任务状态。该系统表属于Shared Relation,所有创建的job记录对所有数据库可见。普通用户需授权后才能访问。 表1 PG_JOB字段 名称 类型 描述 oid oid 行标识符(隐含字段,必须明确选择)。 job_id bigint 作业id,主键,是唯一的(有唯一索引)。 current_postgres_pid bigint 如果当前任务已被执行,那么此处记录运行此任务的线程ID。默认为-1,表示此任务未被执行过。 log_user name 创建者的UserName。 priv_user name 作业执行者的UserName。 dbname name 标识作业要在哪一个数据库执行的数据库名称。 node_name name 标识当前作业是在哪一个CN上创建和执行。 job_status "char" 当前任务的执行状态,默认为's',各取值含义: 'r':running 's':successfully finished 'f':job failed 'd':disable 当job连续执行失败16次,会将job_status自动设置为失效状态'd',后续不再执行该job。 注:当用户将定时任务关闭(即:GUC参数job_queue_processes为0时),由于监控job执行的线程不会启动,所以该状态不会根据job的实时状态进行设置,用户不需要关注此状态。只有当开启定时任务功能(即:GUC参数job_queue_processes为非0时),系统才会根据当前job的实时状态刷新该字段值。 start_date timestamp without time zone 作业第一次开始执行时间,时间精确到毫秒。 next_run_date timestamp without time zone 定时任务下次执行的时间,时间精确到毫秒。 failure_count smallint 失败计数,作业连续执行失败16次,不再继续执行。 interval text 作业执行的重复时间间隔。 last_start_date timestamp without time zone 上次运行开始时间,时间精确到毫秒。 last_end_date timestamp without time zone 上次运行的结束时间,时间精确到毫秒。 last_suc_date timestamp without time zone 上次成功运行的开始时间,时间精确到毫秒。 this_run_date timestamp without time zone 正在运行任务的开始时间,时间精确到毫秒。 nspname name 标识作业执行时的schema的名称。 job_name text DBE_SCHEDULER定时任务专用,定时任务名称。 end_date timestamp without time zone DBE_SCHEDULER定时任务专用,定时任务失效时间,时间精确到毫秒。 enable boolean DBE_SCHEDULER定时任务专用,定时任务启用状态: true:启用。 false:未启用。 failure_msg text 最新一次执行任务报错信息。 父主题: 其他系统表
  • GLOBAL_SESSION_MEMORY 统计各节点的Session级别的内存使用情况,包含执行作业在数据节点上 GaussDB 线程和Stream线程分配的所有内存,单位为MB,如表1所示。 表1 GLOBAL_SESSION_MEMORY字段 名称 类型 描述 node_name name 节点名称。 sessid text 线程启动时间+线程标识。 init_mem integer 当前正在执行作业进入执行器前已分配的内存。 used_mem integer 当前正在执行作业已分配的内存。 peak_mem integer 当前正在执行作业已分配的内存峰值。 父主题: Session/Thread
  • MY_JOBS MY_JOBS视图显示当前用户拥有的定时任务的详细信息。该视图同时存在于PG_CATA LOG 和SYS Schema下。具体字段信息如表1所示。 表1 MY_JOBS字段 名称 类型 描述 job bigint 作业id。 log_user name 创建者的UserName。 priv_user name 作业执行者的UserName。 dbname name 创建作业的数据库名称。 schema_user name 定时任务的默认模式名。 start_date timestamp without time zone 作业第一次开始执行的时间。 start_suc text 作业第一次成功执行对应的开始时间。 last_date timestamp without time zone 上次运行的开始时间。 last_suc text 上次成功运行的开始时间。 last_sec text 上次成功运行的开始时间,提供兼容性支持。 this_date timestamp without time zone 正在运行任务的开始时间。 this_suc text 正在运行任务的开始时间。 this_sec text 正在运行任务的开始时间,提供兼容性支持。 next_date timestamp without time zone 任务下次执行时间。 next_suc text 任务下次执行时间。 next_sec text 任务下次执行时间,提供兼容性支持。 total_time numeric 任务最近一次的执行时长。 broken text 如果status字段取值为d,broken则为'y',否则broken为n。 status "char" 本步骤的执行状态,取值范围:(r、s、f、d),默认为r,取值含义: r:运行中。 s:执行成功。 f:执行失败。 d:取消执行。 interval text 用来计算下次运行时间的时间表达式,如果为null则表示定时任务只执行一次。 failures smallint 失败计数,若作业连续执行失败16次,则不再继续执行。 what text 可执行的作业。 nls_env character varying(4000) 暂不支持,值为NULL。 misc_env raw 暂不支持,值为NULL。 instance numeric 暂不支持,值为NULL。 父主题: 其他系统视图
  • PG_STAT_REPLICATION PG_STAT_REPLICATION视图显示日志同步线程的信息,如发起端发送日志位置,接收端接收日志位置等。具体字段信息如表1所示。 表1 PG_STAT_REPLICATION字段 名称 类型 描述 pid bigint 线程的PID。 usesysid oid 用户系统id。 usename name 用户名。 application_name text 程序名称。 client_addr inet 客户端地址。 client_hostname text 客户端名。 client_port integer 客户端端口。 backend_start timestamp with time zone 程序启动时间。 state text 日志同步线程的状态。 startup:线程正在启动。 catchup:线程正在建立备用服务器和主服务器的连接。 streaming:线程已建立备用服务器和主服务器的连接,正在进行数据的流复制。 backup:线程正在发送备份。 stopping:线程正在停止。 sender_sent_location text 发送端发送日志位置。 receiver_write_location text 接收端write日志位置。 receiver_flush_location text 接收端flush日志位置。 receiver_replay_location text 接收端replay日志位置。 sync_priority integer 同步复制的优先级(0表示异步)。 sync_state text 同步状态: async:异步复制。 sync:同步复制。 potential:该备用服务器现在是异步的,但假如一个当前的同步服务器发生故障,该服务器会变成同步的。 quorum:在同步与异步之间切换,保证备机中有大于一定数量的同步备机,同步备机数量一般为(n+1)/2-1,n为总副本个数。是否为同步备机取决于是否先接到了日志。详情可参考synchronous_standby_names参数描述。 父主题: 其他系统视图
  • 处理结果集 ODBC处理结果集是从数据库中获取数据并将其提供给应用程序进行处理,作用包括但不限于:检索数据、数据展示、数据处理、数据传输和业务逻辑实现等。 ODBC提供处理结果集的相关API如表1所示。 表1 相关API说明 功能 API 绑定缓冲区到结果集的列中 SQLBindCol 结果集中取行集 SQLFetch 返回结果集中某一列的数据 SQLGetData 获取结果集中列的描述信息 SQLColAttribute 查看最近一次操作错误信息 SQLGetDiagRec 示例如下(完整示例请参考获取和处理数据库中的数据): // 在执行完成SQL语句后,获取结果集某一列的属性。 SQLColAttribute(V_OD_hstmt,1,SQL_DESC_TYPE,typename,100,NULL,NULL); printf("SQLColAtrribute %s\n",typename); // 绑定结果集。 SQLBindCol(V_OD_hstmt,1,SQL_C_SLONG, (SQLPOINTER)&V_OD_buffer,150, (SQLLEN *)&V_OD_err); // 通过SQLFetch取结果集中数据。 V_OD_erg=SQLFetch(V_OD_hstmt); // 通过SQLGetData获取并返回数据。 while(V_OD_erg != SQL_NO_DATA) { SQLGetData(V_OD_hstmt,1,SQL_C_SLONG,(SQLPOINTER)&V_OD_id,0,NULL); printf("SQLGetData ----ID = %d\n",V_OD_id); V_OD_erg=SQLFetch(V_OD_hstmt); }; printf("Done !\n"); 父主题: 开发步骤
  • ChainedStreamBuilder的继承关系 ChainedStreamBuilder是逻辑复制的接口,实现类是ReplicationStreamBuilder,该类位于com.huawei.gaussdb.jdbc.replication.fluent Package中,该类的声明如下: public class ReplicationStreamBuilder implements ChainedStreamBuilder
  • ADM_TAB_PRIVS ADM_TAB_PRIVS视图显示数据库中所有对象的授权信息。默认只有系统管理员权限才可以访问此系统视图,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_TAB_PRIVS字段 名称 类型 描述 grantee character varying(128) 被授予权限的用户或角色的名称。 owner character varying(128) 对象的所有者。 table_name character varying(128) 对象的名称。 grantor character varying(128) 执行授权的用户名。 privilege character varying(40) 对象上的权限,包括USAGE、UPDATE、DELETE、INSERT、CONNECT、SELECT、EXECUTE。 grantable character varying(3) 该授权是否包含GRANT选项。 YES:包含GRANT选项。 NO:不包含GRANT选项。 type character varying(24) 对象的类型。包括NODE GROUP、COLUMN_ENCRYPTION_KEY、PACKAGE、COLUMN、TABLE、VIEW、SEQUENCE、TYPE、INDEX、DATABASE、DIRECTORY、FOREIGN DATA WRAPPER、FOREIGN SERVER、LANGUAGE、SCHEMA、TEMPLATE、FUNCTION、PROCEDURE、TABLESPACE。 hierarchy character varying(3) 暂不支持,值为NULL。 common character varying(3) 暂不支持,值为NULL。 inherited character varying(3) 暂不支持,值为NULL。 父主题: 用户和权限管理
  • GS_COMM_LISTEN_ADDRESS_EXT_INFO GS_COMM_LISTEN_ADDRESS_EXT_INFO描述了查询连接当前DN扩展IP的相关线程、会话以及socket等DFX信息。使用场景参见系统函数描述gs_comm_listen_address_ext_info()。 表1 GS_COMM_LISTEN_ADDRESS_EXT_INFO字段 名称 类型 描述 node_name text 当前实例名。 app text 当前连接DN的客户端。 tid bigint 当前线程的线程号。 lwtid integer 当前线程的轻量级线程号。 query_id bigint 当前线程的查询ID。 socket integer 当前物理连接的socket fd。 remote_ip text 当前连接对端IP。 remote_port text 当前连接对端port。 local_ip text 当前连接本端IP。 local_port text 当前连接本端port。 父主题: 通信
  • GS_AUDITING_POLICY_PRIVILEGES GS_AUDITING_POLICY_PRIVILEGES系统表记录统一审计DDL数据库相关操作信息,每条记录对应一个设计策略。需要有系统管理员或安全策略管理员权限才可以访问此系统表。 表1 GS_AUDITING_POLICY_PRIVI字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 privilegetype name DDL数据库操作相关类型。例如CREATE、ALTER、DROP等。 labelname name 资源标签名称。对应系统表12.2.9.1 GS_AUDITING_POLICY中的polname字段。 policyoid oid 对应审计策略系统表12.2.9.1 GS_AUDITING_POLICY中的oid。 modifydate timestamp without time zone 创建或修改的最新时间戳。 父主题: 审计
  • GaussDB导出之后自行解析数据文件的场景 该场景下一般不希望导出的TEXT文件中有GaussDB独有的转义行为,此时需要按如下方式进行处理: 首先确认字段数据中是否存在行结束符或分隔符; 如果包含,需要使用EOL或delimiter参数改用其他字符。需要确保指定的新EOL或delimiter不会在字段数据中存在,建议从不可见字符(0x01 ~ 0x1F)中选取; 可以通过NULL选项指定对数据中的NULL值在导出时的表示方法。 最后添加without escaping参数,禁止转义输出。 导出命令: 1 2 3 --data_source可以是一个表名称,也可以是一个SELECT语句 --server_encoding可以通过SHOW server_encoding获得 COPY {data_source} TO '/path/export.txt' WITHOUT escaping COL e'\x1E' DELIMITER e'\x1F' NULL '\N' ENCODING '{server_encoding}';
  • GaussDB导出并导入到GaussDB场景 建议导出命令: 1 2 3 --data_source可以是一个表名称,也可以是一个select语句。 --server_encoding可以通过SHOW server_encoding获得。 COPY {data_source} TO '/path/export.txt' eol e'\n' delimiter e'\t' ENCODING '{server_encoding}'; 对应导入命令: 1 2 3 --data_destination只能是一个表名称。 --file_encoding为该二进制文件导出时指定的编码格式。 COPY {data_destination} FROM '/path/export.txt' eol e'\n' delimiter e'\t' ENCODING '{file_encoding}';
  • 如何定位数据库死行等统计信息不准 可以使用ANALYZE命令来更新统计信息。如果在执行ANALYZE前后,死行数据差异较大,则表明统计信息不准确。需要注意的是,ANALYZE是通过采样进行统计的,因此存在一定的误差。当表中存在大量空页时,可能会影响统计信息收集的采样准确性。在这种情况下,可以利用上文提到的gs_parse_page_bypath工具增加采样率,以更准确地解析页面并计算死行。 父主题: 常见问题
  • GLOBAL_WLM_WORKLOAD_RUNTIME 显示当前用户在每个CN上执行作业时在CN上的状态信息,如表1所示。需要有监控管理员权限才可以访问。 表1 GLOBAL_WAL_WORKLOAD_RUNTIME字段 名称 类型 描述 node_name text 作业执行所在的CN的名称。 thread_id bigint 后端线程ID。 processid integer 线程的lwpid。 time_stamp bigint 语句执行的开始时间。 username name 登录到该后端的用户名。 memory integer 语句所需的内存大小。 active_points integer 语句在资源池上消耗的资源点数。 max_points integer 资源在资源池上的最大资源数。 priority integer 作业的优先级。 resource_pool text 作业所在资源池。 status text 作业执行的状态,包括: pending:阻塞状态。 running:执行状态。 finished:结束状态。 aborted:终止状态。 unknown:未知状态。 control_group name 作业所使用的Cgroups。 enqueue text 作业的排队信息,包括: GLOBAL:全局排队。 RESPOOL:资源池排队。 ACTIVE:不排队。 query text 正在执行的语句。 node_group text node group名称。 父主题: Workload Manager
  • 注意事项 只有拥有表INSERT权限的用户,才可以向表中插入数据。用户被授予INSERT ANY TABLE权限,即用户对除系统模式之外的任何模式具有USAGE权限,并且拥有这些模式下表的INSERT权限。 如果使用QUERY子句插入来自查询里的数据行,用户还需要拥有在查询里使用的表的SELECT权限。 生成列不能被直接写入。在INSERT命令中不能为生成列指定值,但可以指定关键字DEFAULT。 仅支持在ORA兼容模式下执行该语法。
  • 语法格式 INSERT [/*+ plan_hint */] [ ALL | FIRST ] { [ WHEN condition THEN ] { INTO table_name [ { [alias_name] [ ( column_name [, ...] ) ] } | { [partition_clause] [ AS alias ] [ ( column_name [, ...] ) ] } ] [ VALUES {( { expression | DEFAULT } [, ...] ) } ] }[, ...] }[, ...] { subquery };
  • 参数说明 plan_hint子句 以/*+ */的形式在INSERT关键字后,目前仅适配了语法格式,并未实现具体功能。 ALL/FIRST 如果不带条件子句(WHEN condition THEN),此关键字不可省略,且只能为ALL。如果含有条件子句,此关键字可以省略,默认为ALL,此时ALL和FIRST的含义分别为: ALL:遍历所有匹配条件的分支,只要满足条件就会将数据插入对应的表。 FIRST:查询到第一个满足条件的分支后,将数据插入该分支对应的表,不再继续检查剩余分支。 WHEN condition THEN 插入表时的条件判断,只有满足条件才会进行插入操作,condition中可以引用子查询(SUBQUERY)中的列。 table_name 要插入数据的目标表名。 取值范围:已存在的表名。 alias_name INSERT语句不包含AS alias语法时的表别名。 INTO子句不包含AS alias语法时的表别名不能为关键字(如SELECT、VALUE)或者表达式,表别名要求符合标识符命名规范。 INTO子句不包含AS alias语法时的表别名不支持INTO table_name alias_name(alias_name.col1,...,alias_name.coln) VALUES(xxx);的语法格式。 INTO子句的分区表不包含AS alias语法时的表别名不支持指定分区插入操作。 partition_clause 指定分区插入操作。 PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } | SUBPARTITION { ( subpartition_name ) | FOR ( subpartition_value [, ...] ) } 关键字具体信息请参见SELECT。 如果VALUE子句的值和指定分区不一致,结果会提示异常。 column_name 目标表中的字段名称。 字段名可以由子字段名或者数组下标修饰。 没有在字段列表中出现的每个字段,将由系统默认值或者声明时的默认值进行填充,若无默认值或未声明时则使用NULL填充。例如,向一个复合类型中的某些字段插入数据,其他字段使用NULL进行填充。 目标字段(column_name)按顺序排列。如果没有列出任何字段,则默认全部字段,且顺序为表声明时的顺序。 如果VALUE子句和QUERY中只提供了N个字段,则目标字段为前N个字段。 VALUE子句和QUERY提供的值在表中从左到右关联到对应列。 取值范围:已存在的字段名。 VALUES 不可跟多行。 expression 赋予对应column的一个有效表达式或值。 向表中字段插入单引号(')时需要使用单引号对自身进行转义。 如果插入行的表达式不是正确的数据类型,系统将自动进行类型转换,若转换失败,则插入数据失败,系统返回错误信息。 不支持聚集函数。 不支持子查询。 DEFAULT 对应字段名的缺省值。如果没有缺省值,则为NULL。 subquery 一个查询语句(SELECT语句),将查询结果作为插入的数据,不可省略,如果没有子查询可以使用SELECT * FROM DUAL。 如果子查询带表别名,不可在CONDITION子句和INTO子句中引用该别名。
共100000条