- 关于MogDB
- 快速入门
- 特性描述
- 概览
- 高性能
- 高可用
- 维护性
- 兼容性
- 视图增加%rowtype属性
- 聚合函数distinct性能优化
- 聚合函数支持KEEP子句
- 聚合函数支持场景扩展
- 兼容支持MySQL别名支持单引号
- 支持current_date/current_time关键字作为字段名
- 自定义type数组
- For Update支持外连接
- MogDB支持Insert All特性
- Oracle DBLink语法兼容
- 创建PACKAGE/FUNCTION/PROCEDURE时去除TYPE类型转换提示
- 支持MERGE INTO命中索引时使用Bypass方法
- 支持增加存储过程及函数参数的nocopy属性
- 支持在数组extend的参数中传入数组的count属性
- 支持q quote转义字符
- 支持两个date类型的数据相减返回numeric类型
- 支持表函数table()
- 支持PROCEDURE/FUNCTION/PACKAGE的end后的name和Oracle保持一致
- 支持WHERE CURRENT OF写法
- 支持包内常量作为函数或者过程入参的默认值
- 支持PLPGSQL subtype
- 支持无参数FUNCTION的同义词调用不加括号
- 支持dbms_utility.format_error_backtrace
- 支持PIVOT和UNPIVOT语法
- mod函数兼容
- 支持聚集函数嵌套
- ORDER BY/GROUP BY场景兼容
- 支持在建表后修改表日志属性
- INSERT支持ON CONFLICT子句
- 支持AUTHID CURRENT_USER
- PBE模式支持存储过程out出参
- 数据库安全
- 企业级特性
- 应用开发接口
- AI能力
- 中间件
- 负载管理
- 安装指南
- 升级指南
- 管理指南
- 高可用指南
- AI特性指南
- 安全指南
- 开发者指南
- 应用程序开发教程
- 开发规范
- 基于JDBC开发
- JDBC包、驱动类和环境类
- 开发流程
- 加载驱动
- 连接数据库
- 连接数据库(以SSL方式)
- 连接数据库(UDS方式)
- 执行SQL语句
- 处理结果集
- 关闭连接
- 日志管理
- 示例:常用操作
- 示例:重新执行应用SQL
- 示例:通过本地文件导入导出数据
- 示例:从MY向MogDB进行数据迁移
- 示例:逻辑复制代码示例
- 示例:不同场景下连接数据库参数配置
- 示例:jdbc主备集群负载均衡
- JDBC接口参考
- java.sql.Connection
- java.sql.CallableStatement
- java.sql.DatabaseMetaData
- java.sql.Driver
- java.sql.PreparedStatement
- java.sql.ResultSet
- java.sql.ResultSetMetaData
- java.sql.Statement
- javax.sql.ConnectionPoolDataSource
- javax.sql.DataSource
- javax.sql.PooledConnection
- javax.naming.Context
- javax.naming.spi.InitialContextFactory
- CopyManager
- JDBC常用参数参考
- JDBC发布记录
- 基于ODBC开发
- 基于libpq开发
- 基于Psycopg2开发
- 调试
- 存储过程
- 用户自定义函数
- PL/pgSQL-SQL过程语言
- 定时任务
- 自治事务
- 逻辑复制
- Extension
- MySQL兼容性说明
- Dolphin Extension
- Dolphin概述
- Dolphin安装
- Dolphin限制
- Dolphin语法介绍
- SQL参考
- 关键字
- 数据类型
- 函数和操作符
- 表达式
- DDL语法一览表
- DML语法一览表
- DCL语法一览表
- SQL语法
- ALTER DATABASE
- ALTER FUNCTION
- ALTER PROCEDURE
- ALTER SERVER
- ALTER TABLE
- ALTER TABLE PARTITION
- ALTER TABLESPACE
- ALTER VIEW
- ANALYZE | ANALYSE
- AST
- CHECKSUM TABLE
- CREATE DATABASE
- CREATE FUNCTION
- CREATE INDEX
- CREATE PROCEDURE
- CREATE SERVER
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLE PARTITION
- CREATE TABLESPACE
- CREATE TRIGGER
- CREATE VIEW
- DESCRIBE TABLE
- DO
- DROP DATABASE
- DROP INDEX
- DROP TABLESPACE
- EXECUTE
- EXPLAIN
- FLUSH BINARY LOGS
- GRANT
- GRANT/REVOKE PROXY
- INSERT
- KILL
- LOAD DATA
- OPTIMIZE TABLE
- PREPARE
- RENAME TABLE
- RENAME USER
- REVOKE
- SELECT
- SELECT HINT
- SET CHARSET
- SET PASSWORD
- SHOW CHARACTER SET
- SHOW COLLATION
- SHOW COLUMNS
- SHOW CREATE DATABASE
- SHOW CREATE FUNCTION
- SHOW CREATE PROCEDURE
- SHOW CREATE TABLE
- SHOW CREATE TRIGGER
- SHOW CREATE VIEW
- SHOW DATABASES
- SHOW FUNCTION STATUS
- SHOW GRANTS
- SHOW INDEX
- SHOW MASTER STATUS
- SHOW PLUGINS
- SHOW PRIVILEGES
- SHOW PROCEDURE STATUS
- SHOW PROCESSLIST
- SHOW SLAVE HOSTS
- SHOW STATUS
- SHOW TABLES
- SHOW TABLE STATUS
- SHOW TRIGGERS
- SHOW VARIABLES
- SHOW WARNINGS/ERRORS
- UPDATE
- USE db_name
- 系统视图
- GUC参数说明
- 重设参数
- 存储过程
- 标识符说明
- SQL参考
- MySQL语法兼容性评估工具
- Dolphin Extension
- 物化视图
- 分区管理
- 应用程序开发教程
- 性能优化指南
- 参考指南
- 系统表及系统视图
- 系统表和系统视图概述
- 查看系统表
- 系统表
- GS_ASP
- GS_AUDITING_POLICY
- GS_AUDITING_POLICY_ACCESS
- GS_AUDITING_POLICY_FILTERS
- GS_AUDITING_POLICY_PRIVILEGES
- GS_CLIENT_GLOBAL_KEYS
- GS_CLIENT_GLOBAL_KEYS_ARGS
- GS_COLUMN_KEYS
- GS_COLUMN_KEYS_ARGS
- GS_DB_PRIVILEGE
- GS_ENCRYPTED_COLUMNS
- GS_ENCRYPTED_PROC
- GS_GLOBAL_CHAIN
- GS_GLOBAL_CONFIG
- GS_MASKING_POLICY
- GS_MASKING_POLICY_ACTIONS
- GS_MASKING_POLICY_FILTERS
- GS_MATVIEW
- GS_MATVIEW_DEPENDENCY
- GS_MODEL_WAREHOUSE
- GS_OPT_MODEL
- GS_PACKAGE
- GS_POLICY_LABEL
- GS_RECYCLEBIN
- GS_TXN_SNAPSHOT
- GS_UID
- GS_WLM_EC_OPERATOR_INFO
- GS_WLM_INSTANCE_HISTORY
- GS_WLM_OPERATOR_INFO
- GS_WLM_PLAN_ENCODING_TABLE
- GS_WLM_PLAN_OPERATOR_INFO
- GS_WLM_SESSION_QUERY_INFO_ALL
- GS_WLM_USER_RESOURCE_HISTORY
- PG_AGGREGATE
- PG_AM
- PG_AMOP
- PG_AMPROC
- PG_APP_WORKLOADGROUP_MAPPING
- PG_ATTRDEF
- PG_ATTRIBUTE
- PG_AUTH_HISTORY
- PG_AUTH_MEMBERS
- PG_AUTHID
- PG_CAST
- PG_CLASS
- PG_COLLATION
- PG_CONSTRAINT
- PG_CONVERSION
- PG_DATABASE
- PG_DB_ROLE_SETTING
- PG_DEFAULT_ACL
- PG_DEPEND
- PG_DESCRIPTION
- PG_DIRECTORY
- PG_ENUM
- PG_EVENT_TRIGGER
- PG_EXTENSION
- PG_EXTENSION_DATA_SOURCE
- PG_FOREIGN_DATA_WRAPPER
- PG_FOREIGN_SERVER
- PG_FOREIGN_TABLE
- PG_HASHBUCKET
- PG_INDEX
- PG_INHERITS
- PG_JOB
- PG_JOB_PROC
- PG_LANGUAGE
- PG_LARGEOBJECT
- PG_LARGEOBJECT_METADATA
- PG_NAMESPACE
- PG_OBJECT
- PG_OPCLASS
- PG_OPERATOR
- PG_OPFAMILY
- PG_PARTITION
- PG_PLTEMPLATE
- PG_PROC
- PG_PUBLICATION
- PG_PUBLICATION_REL
- PG_RANGE
- PG_REPLICATION_ORIGIN
- PG_RESOURCE_POOL
- PG_REWRITE
- PG_RLSPOLICY
- PG_SECLABEL
- PG_SET
- PG_SHDEPEND
- PG_SHDESCRIPTION
- PG_SHSECLABEL
- PG_STATISTIC
- PG_STATISTIC_EXT
- PG_SUBSCRIPTION
- PG_SUBSCRIPTION_REL
- PG_SYNONYM
- PG_TABLESPACE
- PG_TRIGGER
- PG_TS_CONFIG
- PG_TS_CONFIG_MAP
- PG_TS_DICT
- PG_TS_PARSER
- PG_TS_TEMPLATE
- PG_TYPE
- PG_USER_MAPPING
- PG_USER_STATUS
- PG_WORKLOAD_GROUP
- PGXC_CLASS
- PGXC_GROUP
- PGXC_NODE
- PGXC_SLICE
- PLAN_TABLE_DATA
- STATEMENT_HISTORY
- 系统视图
- GET_GLOBAL_PREPARED_XACTS(废弃)
- GS_ASYNC_SUBMIT_SESSIONS_STATUS
- GS_AUDITING
- GS_AUDITING_ACCESS
- GS_AUDITING_PRIVILEGE
- GS_CLUSTER_RESOURCE_INFO
- GS_COMPRESSION
- GS_DB_PRIVILEGES
- GS_FILE_STAT
- GS_GSC_MEMORY_DETAIL
- GS_INSTANCE_TIME
- GS_LABELS
- GS_LSC_MEMORY_DETAIL
- GS_MASKING
- GS_MATVIEWS
- GS_OS_RUN_INFO
- GS_REDO_STAT
- GS_SESSION_CPU_STATISTICS
- GS_SESSION_MEMORY
- GS_SESSION_MEMORY_CONTEXT
- GS_SESSION_MEMORY_DETAIL
- GS_SESSION_MEMORY_STATISTICS
- GS_SESSION_STAT
- GS_SESSION_TIME
- GS_SHARED_MEMORY_DETAIL
- GS_SQL_COUNT
- GS_STAT_SESSION_CU
- GS_THREAD_MEMORY_CONTEXT
- GS_TOTAL_MEMORY_DETAIL
- GS_WLM_CGROUP_INFO
- GS_WLM_EC_OPERATOR_STATISTICS
- GS_WLM_OPERATOR_HISTORY
- GS_WLM_OPERATOR_STATISTICS
- GS_WLM_PLAN_OPERATOR_HISTORY
- GS_WLM_REBUILD_USER_RESOURCE_POOL
- GS_WLM_RESOURCE_POOL
- GS_WLM_SESSION_HISTORY
- GS_WLM_SESSION_INFO
- GS_WLM_SESSION_INFO_ALL
- GS_WLM_SESSION_STATISTICS
- GS_WLM_USER_INFO
- IOS_STATUS
- MPP_TABLES
- PG_AVAILABLE_EXTENSION_VERSIONS
- PG_AVAILABLE_EXTENSIONS
- PG_COMM_DELAY
- PG_COMM_RECV_STREAM
- PG_COMM_SEND_STREAM
- PG_COMM_STATUS
- PG_CONTROL_GROUP_CONFIG
- PG_CURSORS
- PG_EXT_STATS
- PG_GET_INVALID_BACKENDS
- PG_GET_SENDERS_CATCHUP_TIME
- PG_GROUP
- PG_GTT_ATTACHED_PIDS
- PG_GTT_RELSTATS
- PG_GTT_STATS
- PG_INDEXES
- PG_LOCKS
- PG_NODE_ENV
- PG_OS_THREADS
- PG_PREPARED_STATEMENTS
- PG_PREPARED_XACTS
- PG_PUBLICATION_TABLES
- PG_REPLICATION_ORIGIN_STATUS
- PG_REPLICATION_SLOTS
- PG_RLSPOLICIES
- PG_ROLES
- PG_RULES
- PG_RUNNING_XACTS
- PG_SECLABELS
- PG_SESSION_IOSTAT
- PG_SESSION_WLMSTAT
- PG_SETTINGS
- PG_SHADOW
- PG_STAT_ACTIVITY
- PG_STAT_ACTIVITY_NG
- PG_STAT_ALL_INDEXES
- PG_STAT_ALL_TABLES
- PG_STAT_BAD_BLOCK
- PG_STAT_BGWRITER
- PG_STAT_DATABASE
- PG_STAT_DATABASE_CONFLICTS
- PG_STAT_REPLICATION
- PG_STAT_SUBSCRIPTION
- PG_STAT_SYS_INDEXES
- PG_STAT_SYS_TABLES
- PG_STAT_USER_FUNCTIONS
- PG_STAT_USER_INDEXES
- PG_STAT_USER_TABLES
- PG_STAT_XACT_ALL_TABLES
- PG_STAT_XACT_SYS_TABLES
- PG_STAT_XACT_USER_FUNCTIONS
- PG_STAT_XACT_USER_TABLES
- PG_STATIO_ALL_INDEXES
- PG_STATIO_ALL_SEQUENCES
- PG_STATIO_ALL_TABLES
- PG_STATIO_SYS_INDEXES
- PG_STATIO_SYS_SEQUENCES
- PG_STATIO_SYS_TABLES
- PG_STATIO_USER_INDEXES
- PG_STATIO_USER_SEQUENCES
- PG_STATIO_USER_TABLES
- PG_STATS
- PG_TABLES
- PG_TDE_INFO
- PG_THREAD_WAIT_STATUS
- PG_TIMEZONE_ABBREVS
- PG_TIMEZONE_NAMES
- PG_TOTAL_MEMORY_DETAIL
- PG_TOTAL_USER_RESOURCE_INFO
- PG_TOTAL_USER_RESOURCE_INFO_OID
- PG_USER
- PG_USER_MAPPINGS
- PG_VARIABLE_INFO
- PG_VIEWS
- PG_WLM_STATISTICS
- PGXC_PREPARED_XACTS
- PLAN_TABLE
- PATCH_INFORMATION_TABLE
- 系统函数
- 逻辑操作符
- 比较操作符
- 字符处理函数和操作符
- 二进制字符串函数和操作符
- 位串函数和操作符
- 模式匹配操作符
- 数字操作函数和操作符
- 时间和日期处理函数和操作符
- 类型转换函数
- 几何函数和操作符
- 网络地址函数和操作符
- 文本检索函数和操作符
- JSON/JSONB函数和操作符
- HLL函数和操作符
- SEQUENCE函数
- 数组函数和操作符
- 范围函数和操作符
- 聚集函数
- 窗口函数(分析函数)
- 安全函数
- 账本数据库的函数
- 密态等值的函数
- 返回集合的函数
- 条件表达式函数
- 系统信息函数
- 系统管理函数
- 统计信息函数
- 触发器函数
- 事件触发器函数
- HashFunc函数
- 提示信息函数
- 全局临时表函数
- 故障注入系统函数
- AI特性函数
- 动态数据脱敏函数
- 其他系统函数
- 内部函数
- Global SysCache特性函数
- 数据损坏检测修复函数
- XML类型函数
- 废弃函数
- 支持的数据类型
- SQL语法
- ABORT
- ALTER AGGREGATE
- ALTER AUDIT POLICY
- ALTER DATABASE
- ALTER DATA SOURCE
- ALTER DEFAULT PRIVILEGES
- ALTER DIRECTORY
- ALTER EVENT
- ALTER EVENT TRIGGER
- ALTER EXTENSION
- ALTER FOREIGN DATA WRAPPER
- ALTER FOREIGN TABLE
- ALTER FUNCTION
- ALTER GLOBAL CONFIGURATION
- ALTER GROUP
- ALTER INDEX
- ALTER LANGUAGE
- ALTER LARGE OBJECT
- ALTER MASKING POLICY
- ALTER MATERIALIZED VIEW
- ALTER OPERATOR
- ALTER PACKAGE
- ALTER PROCEDURE
- ALTER PUBLICATION
- ALTER RESOURCE LABEL
- ALTER RESOURCE POOL
- ALTER ROLE
- ALTER ROW LEVEL SECURITY POLICY
- ALTER RULE
- ALTER SCHEMA
- ALTER SEQUENCE
- ALTER SERVER
- ALTER SESSION
- ALTER SUBSCRIPTION
- ALTER SYNONYM
- ALTER SYSTEM KILL SESSION
- ALTER SYSTEM SET
- ALTER TABLE
- ALTER TABLE PARTITION
- ALTER TABLE SUBPARTITION
- ALTER TABLESPACE
- ALTER TEXT SEARCH CONFIGURATION
- ALTER TEXT SEARCH DICTIONARY
- ALTER TRIGGER
- ALTER TYPE
- ALTER USER
- ALTER USER MAPPING
- ALTER VIEW
- ANALYZE | ANALYSE
- BEGIN
- CALL
- CHECKPOINT
- CLEAN CONNECTION
- CLOSE
- CLUSTER
- COMMENT
- COMMIT | END
- COMMIT PREPARED
- CONNECT BY
- COPY
- CREATE AGGREGATE
- CREATE AUDIT POLICY
- CREATE CAST
- CREATE CLIENT MASTER KEY
- CREATE COLUMN ENCRYPTION KEY
- CREATE DATABASE
- CREATE DATA SOURCE
- CREATE DIRECTORY
- CREATE EVENT
- CREATE EVENT TRIGGER
- CREATE EXTENSION
- CREATE FOREIGN DATA WRAPPER
- CREATE FOREIGN TABLE
- CREATE FUNCTION
- CREATE GROUP
- CREATE INCREMENTAL MATERIALIZED VIEW
- CREATE INDEX
- CREATE LANGUAGE
- CREATE MASKING POLICY
- CREATE MATERIALIZED VIEW
- CREATE MODEL
- CREATE OPERATOR
- CREATE PACKAGE
- CREATE PROCEDURE
- CREATE PUBLICATION
- CREATE RESOURCE LABEL
- CREATE RESOURCE POOL
- CREATE ROLE
- CREATE ROW LEVEL SECURITY POLICY
- CREATE RULE
- CREATE SCHEMA
- CREATE SEQUENCE
- CREATE SERVER
- CREATE SUBSCRIPTION
- CREATE SYNONYM
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLE PARTITION
- CREATE TABLESPACE
- CREATE TABLE SUBPARTITION
- CREATE TEXT SEARCH CONFIGURATION
- CREATE TEXT SEARCH DICTIONARY
- CREATE TRIGGER
- CREATE TYPE
- CREATE USER
- CREATE USER MAPPING
- CREATE VIEW
- CREATE WEAK PASSWORD DICTIONARY
- CURSOR
- DEALLOCATE
- DECLARE
- DELETE
- DELIMITER
- DO
- DROP AGGREGATE
- DROP AUDIT POLICY
- DROP CAST
- DROP CLIENT MASTER KEY
- DROP COLUMN ENCRYPTION KEY
- DROP DATABASE
- DROP DATA SOURCE
- DROP DIRECTORY
- DROP EVENT
- DROP EVENT TRIGGER
- DROP EXTENSION
- DROP FOREIGN DATA WRAPPER
- DROP FOREIGN TABLE
- DROP FUNCTION
- DROP GLOBAL CONFIGURATION
- DROP GROUP
- DROP INDEX
- DROP LANGUAGE
- DROP MASKING POLICY
- DROP MATERIALIZED VIEW
- DROP MODEL
- DROP OPERATOR
- DROP OWNED
- DROP PACKAGE
- DROP PROCEDURE
- DROP PUBLICATION
- DROP RESOURCE LABEL
- DROP RESOURCE POOL
- DROP ROLE
- DROP ROW LEVEL SECURITY POLICY
- DROP RULE
- DROP SCHEMA
- DROP SEQUENCE
- DROP SERVER
- DROP SUBSCRIPTION
- DROP SYNONYM
- DROP TABLE
- DROP TABLESPACE
- DROP TEXT SEARCH CONFIGURATION
- DROP TEXT SEARCH DICTIONARY
- DROP TRIGGER
- DROP TYPE
- DROP USER
- DROP USER MAPPING
- DROP VIEW
- DROP WEAK PASSWORD DICTIONARY
- EXECUTE
- EXECUTE DIRECT
- EXPLAIN
- EXPLAIN PLAN
- FETCH
- GRANT
- INSERT
- LOCK
- MERGE INTO
- MOVE
- PREDICT BY
- PREPARE
- PREPARE TRANSACTION
- PURGE
- REASSIGN OWNED
- REFRESH INCREMENTAL MATERIALIZED VIEW
- REFRESH MATERIALIZED VIEW
- REINDEX
- RELEASE SAVEPOINT
- RESET
- REVOKE
- ROLLBACK
- ROLLBACK PREPARED
- ROLLBACK TO SAVEPOINT
- SAVEPOINT
- SELECT
- SELECT INTO
- SET
- SET CONSTRAINTS
- SET ROLE
- SET SESSION AUTHORIZATION
- SET TRANSACTION
- SHOW
- SHOW EVENTS
- SHRINK
- SHUTDOWN
- SNAPSHOT
- START TRANSACTION
- TIMECAPSULE TABLE
- TRUNCATE
- UPDATE
- VACUUM
- VALUES
- SQL参考
- GUC参数说明
- Schema
- Information Schema
- DBE_PERF
- OS
- Instance
- Memory
- File
- Object
- STAT_USER_TABLES
- SUMMARY_STAT_USER_TABLES
- GLOBAL_STAT_USER_TABLES
- STAT_USER_INDEXES
- SUMMARY_STAT_USER_INDEXES
- GLOBAL_STAT_USER_INDEXES
- STAT_SYS_TABLES
- SUMMARY_STAT_SYS_TABLES
- GLOBAL_STAT_SYS_TABLES
- STAT_SYS_INDEXES
- SUMMARY_STAT_SYS_INDEXES
- GLOBAL_STAT_SYS_INDEXES
- STAT_ALL_TABLES
- SUMMARY_STAT_ALL_TABLES
- GLOBAL_STAT_ALL_TABLES
- STAT_ALL_INDEXES
- SUMMARY_STAT_ALL_INDEXES
- GLOBAL_STAT_ALL_INDEXES
- STAT_DATABASE
- SUMMARY_STAT_DATABASE
- GLOBAL_STAT_DATABASE
- STAT_DATABASE_CONFLICTS
- SUMMARY_STAT_DATABASE_CONFLICTS
- GLOBAL_STAT_DATABASE_CONFLICTS
- STAT_XACT_ALL_TABLES
- SUMMARY_STAT_XACT_ALL_TABLES
- GLOBAL_STAT_XACT_ALL_TABLES
- STAT_XACT_SYS_TABLES
- SUMMARY_STAT_XACT_SYS_TABLES
- GLOBAL_STAT_XACT_SYS_TABLES
- STAT_XACT_USER_TABLES
- SUMMARY_STAT_XACT_USER_TABLES
- GLOBAL_STAT_XACT_USER_TABLES
- STAT_XACT_USER_FUNCTIONS
- SUMMARY_STAT_XACT_USER_FUNCTIONS
- GLOBAL_STAT_XACT_USER_FUNCTIONS
- STAT_BAD_BLOCK
- SUMMARY_STAT_BAD_BLOCK
- GLOBAL_STAT_BAD_BLOCK
- STAT_USER_FUNCTIONS
- SUMMARY_STAT_USER_FUNCTIONS
- GLOBAL_STAT_USER_FUNCTIONS
- Workload
- Session/Thread
- SESSION_STAT
- GLOBAL_SESSION_STAT
- SESSION_TIME
- GLOBAL_SESSION_TIME
- SESSION_MEMORY
- GLOBAL_SESSION_MEMORY
- SESSION_MEMORY_DETAIL
- GLOBAL_SESSION_MEMORY_DETAIL
- SESSION_STAT_ACTIVITY
- GLOBAL_SESSION_STAT_ACTIVITY
- THREAD_WAIT_STATUS
- GLOBAL_THREAD_WAIT_STATUS
- LOCAL_THREADPOOL_STATUS
- GLOBAL_THREADPOOL_STATUS
- SESSION_CPU_RUNTIME
- SESSION_MEMORY_RUNTIME
- STATEMENT_IOSTAT_COMPLEX_RUNTIME
- LOCAL_ACTIVE_SESSION
- Transaction
- Query
- STATEMENT
- SUMMARY_STATEMENT
- STATEMENT_COUNT
- GLOBAL_STATEMENT_COUNT
- SUMMARY_STATEMENT_COUNT
- GLOBAL_STATEMENT_COMPLEX_HISTORY
- GLOBAL_STATEMENT_COMPLEX_HISTORY_TABLE
- GLOBAL_STATEMENT_COMPLEX_RUNTIME
- STATEMENT_RESPONSETIME_PERCENTILE
- STATEMENT_COMPLEX_RUNTIME
- STATEMENT_COMPLEX_HISTORY_TABLE
- STATEMENT_COMPLEX_HISTORY
- STATEMENT_WLMSTAT_COMPLEX_RUNTIME
- STATEMENT_HISTORY
- Cache/IO
- STATIO_USER_TABLES
- SUMMARY_STATIO_USER_TABLES
- GLOBAL_STATIO_USER_TABLES
- STATIO_USER_INDEXES
- SUMMARY_STATIO_USER_INDEXES
- GLOBAL_STATIO_USER_INDEXES
- STATIO_USER_SEQUENCES
- SUMMARY_STATIO_USER_SEQUENCES
- GLOBAL_STATIO_USER_SEQUENCES
- STATIO_SYS_TABLES
- SUMMARY_STATIO_SYS_TABLES
- GLOBAL_STATIO_SYS_TABLES
- STATIO_SYS_INDEXES
- SUMMARY_STATIO_SYS_INDEXES
- GLOBAL_STATIO_SYS_INDEXES
- STATIO_SYS_SEQUENCES
- SUMMARY_STATIO_SYS_SEQUENCES
- GLOBAL_STATIO_SYS_SEQUENCES
- STATIO_ALL_TABLES
- SUMMARY_STATIO_ALL_TABLES
- GLOBAL_STATIO_ALL_TABLES
- STATIO_ALL_INDEXES
- SUMMARY_STATIO_ALL_INDEXES
- GLOBAL_STATIO_ALL_INDEXES
- STATIO_ALL_SEQUENCES
- SUMMARY_STATIO_ALL_SEQUENCES
- GLOBAL_STATIO_ALL_SEQUENCES
- GLOBAL_STAT_DB_CU
- GLOBAL_STAT_SESSION_CU
- Utility
- REPLICATION_STAT
- GLOBAL_REPLICATION_STAT
- REPLICATION_SLOTS
- GLOBAL_REPLICATION_SLOTS
- BGWRITER_STAT
- GLOBAL_BGWRITER_STAT
- GLOBAL_CKPT_STATUS
- GLOBAL_DOUBLE_WRITE_STATUS
- GLOBAL_PAGEWRITER_STATUS
- GLOBAL_RECORD_RESET_TIME
- GLOBAL_REDO_STATUS
- GLOBAL_RECOVERY_STATUS
- CLASS_VITAL_INFO
- USER_LOGIN
- SUMMARY_USER_LOGIN
- GLOBAL_GET_BGWRITER_STATUS
- GLOBAL_SINGLE_FLUSH_DW_STATUS
- GLOBAL_CANDIDATE_STATUS
- Lock
- Wait Events
- Configuration
- Operator
- Workload Manager
- Global Plancache
- RTO
- DBE_PLDEBUGGER Schema
- DBE_PLDEBUGGER.turn_on
- DBE_PLDEBUGGER.turn_off
- DBE_PLDEBUGGER.local_debug_server_info
- DBE_PLDEBUGGER.attach
- DBE_PLDEBUGGER.info_locals
- DBE_PLDEBUGGER.next
- DBE_PLDEBUGGER.continue
- DBE_PLDEBUGGER.abort
- DBE_PLDEBUGGER.print_var
- DBE_PLDEBUGGER.info_code
- DBE_PLDEBUGGER.step
- DBE_PLDEBUGGER.add_breakpoint
- DBE_PLDEBUGGER.delete_breakpoint
- DBE_PLDEBUGGER.info_breakpoints
- DBE_PLDEBUGGER.backtrace
- DBE_PLDEBUGGER.disable_breakpoint
- DBE_PLDEBUGGER.enable_breakpoint
- DBE_PLDEBUGGER.finish
- DBE_PLDEBUGGER.set_var
- DB4AI Schema
- DBE_PLDEVELOPER
- DBE_SQL_UTIL Schema
- 工具参考
- 工具一览表
- 客户端工具
- 服务端工具
- 系统内部使用的工具
- dsscmd
- dssserver
- mogdb
- gs_backup
- gs_basebackup
- gs_ctl
- gs_initdb
- gs_install
- gs_postuninstall
- gs_preinstall
- gs_sshexkey
- gs_tar
- gs_uninstall
- gs_upgradectl
- gs_expansion
- gs_dropnode
- gs_probackup
- gstrace
- kdb5_util
- kadmin.local
- kinit
- klist
- krb5kdc
- kdestroy
- pg_config
- pg_controldata
- pg_recvlogical
- pg_resetxlog
- pg_archivecleanup
- pssh
- pscp
- transfer.py
- FAQ
- MogDB可运行脚本功能说明
- gs_collector工具支持收集的系统表和视图列表
- 数据库报错信息
- SQL标准错误码说明
- 第三方库错误码说明
- GAUSS-00001 - GAUSS-00100
- GAUSS-00101 - GAUSS-00200
- GAUSS 00201 - GAUSS 00300
- GAUSS 00301 - GAUSS 00400
- GAUSS 00401 - GAUSS 00500
- GAUSS 00501 - GAUSS 00600
- GAUSS 00601 - GAUSS 00700
- GAUSS 00701 - GAUSS 00800
- GAUSS 00801 - GAUSS 00900
- GAUSS 00901 - GAUSS 01000
- GAUSS 01001 - GAUSS 01100
- GAUSS 01101 - GAUSS 01200
- GAUSS 01201 - GAUSS 01300
- GAUSS 01301 - GAUSS 01400
- GAUSS 01401 - GAUSS 01500
- GAUSS 01501 - GAUSS 01600
- GAUSS 01601 - GAUSS 01700
- GAUSS 01701 - GAUSS 01800
- GAUSS 01801 - GAUSS 01900
- GAUSS 01901 - GAUSS 02000
- GAUSS 02001 - GAUSS 02100
- GAUSS 02101 - GAUSS 02200
- GAUSS 02201 - GAUSS 02300
- GAUSS 02301 - GAUSS 02400
- GAUSS 02401 - GAUSS 02500
- GAUSS 02501 - GAUSS 02600
- GAUSS 02601 - GAUSS 02700
- GAUSS 02701 - GAUSS 02800
- GAUSS 02801 - GAUSS 02900
- GAUSS 02901 - GAUSS 03000
- GAUSS 03001 - GAUSS 03100
- GAUSS 03101 - GAUSS 03200
- GAUSS 03201 - GAUSS 03300
- GAUSS 03301 - GAUSS 03400
- GAUSS 03401 - GAUSS 03500
- GAUSS 03501 - GAUSS 03600
- GAUSS 03601 - GAUSS 03700
- GAUSS 03701 - GAUSS 03800
- GAUSS 03801 - GAUSS 03900
- GAUSS 03901 - GAUSS 04000
- GAUSS 04001 - GAUSS 04100
- GAUSS 04101 - GAUSS 04200
- GAUSS 04201 - GAUSS 04300
- GAUSS 04301 - GAUSS 04400
- GAUSS 04401 - GAUSS 04500
- GAUSS 04501 - GAUSS 04600
- GAUSS 04601 - GAUSS 04700
- GAUSS 04701 - GAUSS 04800
- GAUSS 04801 - GAUSS 04900
- GAUSS 04901 - GAUSS 05000
- GAUSS 05001 - GAUSS 05100
- GAUSS 05101 - GAUSS 05200
- GAUSS 05201 - GAUSS 05300
- GAUSS 05301 - GAUSS 05400
- GAUSS 05401 - GAUSS 05500
- GAUSS 05501 - GAUSS 05600
- GAUSS 05601 - GAUSS 05700
- GAUSS 05701 - GAUSS 05800
- GAUSS 05801 - GAUSS 05900
- GAUSS 05901 - GAUSS 06000
- GAUSS 06001 - GAUSS 06100
- GAUSS 06101 - GAUSS 06200
- GAUSS 06201 - GAUSS 06300
- GAUSS 06301 - GAUSS 06400
- GAUSS 06401 - GAUSS 06500
- GAUSS 06501 - GAUSS 06600
- GAUSS 06601 - GAUSS 06700
- GAUSS 06701 - GAUSS 06800
- GAUSS 06801 - GAUSS 06900
- GAUSS 06901 - GAUSS 07000
- GAUSS 07001 - GAUSS 07100
- GAUSS 07101 - GAUSS 07200
- GAUSS 07201 - GAUSS 07300
- GAUSS 07301 - GAUSS 07400
- GAUSS 07401 - GAUSS 07500
- GAUSS 50000 - GAUSS 50999
- GAUSS 51000 - GAUSS 51999
- GAUSS 52000 - GAUSS 52999
- GAUSS 53000 - GAUSS 53699
- 错误日志信息参考
- 系统表及系统视图
- 故障诊断指南
- 源码解析
- 常见问题解答 (FAQs)
- 术语表
- 通信矩阵
- Mogeaver
数组、集合和record
数组
数组类型的使用
在使用数组之前,需要自定义一个数组类型。
在存储过程中紧跟AS关键字后面定义数组类型。定义方法如下。
TYPE array_type IS VARRAY(size) OF data_type;
其中:
- array_type: 要定义的数组类型名。
- VARRAY: 表示要定义的数组类型。
- size: 取值为正整数,表示可以容纳的成员的最大数量。
- data_type: 要创建的数组中成员的类型。
说明:
- 在MogDB中,数组会自动增长,访问越界会返回一个NULL,不会报错。
- 在存储过程中定义的数组类型,其作用域仅在该存储过程中。
- 建议选择上述定义方法的一种来自定义数组类型,当同时使用两种方法定义同名的数组类型时,MogDB会优先选择存储过程中定义的数组类型来声明数组变量。
- data_type也可以为存储过程中定义的record类型(匿名块不支持),但不可以为存储过程中定义的数组或集合类型。
MogDB支持使用圆括号来访问数组元素,且还支持一些特有的函数,如extend、count、first、last、prior、exists、 trim、next、delete来访问数组的内容。
说明:
- 存储过程中如果有DML语句(SELECT、UPDATE、INSERT、DELETE),DML语句推荐使用中括号来访问数组元素,使用小括号默认识别为数组访问,若数组不存在,则识别为函数表达式。
- 存储过程中的table of类型、record类型、clob作为出入参、游标、raise info等对大于1GB的clob类型不支持。
集合
集合类型的使用
在使用集合之前,需要自定义一个集合类型。
在存储过程中紧跟AS关键字后面定义集合类型。定义方法如下。
其中:
- table_type:要定义的集合类型名。
- TABLE:表示要定义集合类型。
- data_type:要创建的集合中成员的类型。
- indexby_type: 创建集合索引的类型。
无索引的集合类型
以变长数组的方式存储指定数据类型的成员,用户可以通过extend函数扩展存储空间,通过trim函数释放存储空间。存储空间为10,成员类型为int的集合变量x,存储方式如下图所示:
其中成员 x(2),x(5),x(8)三个成员是无效的,但是存储空间仍然保留,后续可以继续赋值,而不需要重新分配空间。
定义集合类型后,使用table_type作为类型名声明变量:
var_name table_type [:= table_type([v1[,...]])];
可在变量声明时或者声明后使用类型构造器对变量进行初始化。如未初始化,变量var_name的值为NULL。
变量声明和初始化后,可通过下标访问集合成员,或者对成员进行赋值。下标的范围为 [1, upper], upper 的值为当前空间的大小。如访问已被删除的成员,读取到的是已删除成员下一个索引位置的值。
说明:
- 非兼容A模式下(参数sql_compatibility值不为A),不支持创建集合类型。
- 在MogDB中,无索引的集合不会自动增长,访问下标越界时会报错。
- 支持在schema、匿名块、存储过程、自定义函数、package中定义的集合类型,其作用域各不相同。
- NOT NULL只支持语法不支持功能。
- char、vachar、numeric、float、number等元素类型的范围约束语法创建集合类型,例如:“create type t1 is table of numeric(5); ”只支持语法创建,不支持元素的范围约束功能,功能等同于“create type t1 is table of numeric;”。
- data_type可以为基础数据类型、或存储过程内定义的record类型、集合类型、数组类型,不支持ref cursor类型。
- 不同的集合类型的变量不能相互赋值。即使成员类型相同,但集合类型名称不同,也是不同的集合类型。如TYPE t1 IS TABLE OF int;和TYPE t2 IS TABLE OF int;定义的两个集合类型,t1和t2是不同的集合类型,以其定义的变量不支持相互赋值。
- 不支持数组成员的类型为集合类型,包括间接嵌套的场景,如数组成员为record类型,record类型某个成员的类型为集合的场景。
- 只支持集合的等值(=)与非等值(<>或!=)比较,不支持其他关系运算和算数运算操作。
- 集合类型与NULL比较时,请使用 IS [ NOT ] NULL,使用 = 操作符与NULL比较的结果不准确。
- 支持集合类型变量作为函数的参数和返回值,此时要求参数或者返回值的类型是在schema或者package中定义的集合类型。
- 无索引的集合作为函数入参时,可以传入对应子元素类型相同的数组类型作为入参,不支持多维数组,且要求数组下标从1开始(过时的方法,不建议使用该功能。可执行“set behavior_compat_options = 'disable_rewrite_nesttable';”禁用)。
- 不支持对XML类型数据操作。
- 集合类型的构造器不支持浮点数以及表达式作为下标。
MogDB支持使用圆括号来访问集合元素,且还支持一些特有的函数,如extend,count,first,last, prior, next, delete来访问集合的内容。
集合函数支持multiset union/intersect/except all/distinct函数。
带索引的集合类型
该集合类型将下标和对应成员值以键值对的方式存储在HASH表中,对该类型变量的所有操作实际就是对HASH表的操作。用户无需自行扩展或释放存储空间,仅需通过赋值或delete方式进行存储和删除成员。集合相关操作、说明如下:
-
类型定义
索引集合类型定义需同时指定成员类型data_type和下标类型indexby_type,其中下标类型仅支持integer和varchar。
-
变量声明和初始化
索引集合类型声明后存在3种初始化场景:未初始化、初始化为空、初始化指定下标和成员值。其中未初始化和初始化为空场景对变量的效果一致。未初始化或初始化为空后变量不为NULL,后续都可以对变量直接进行赋值。初始化指定下标和成员值场景会将指定的下标和成员值以键值对的形式保存到变量中。
-
变量赋值
索引集合类型变量赋值分为两种:成员赋值和整体赋值。成员赋值可通过指定下标方式对某个成员赋值,若该成员不存在则直接赋值,若存在则刷新该成员值。整体赋值则会将被赋值变量中原有成员都清空后重新保存新的成员值。整体赋值场景不能给变量赋NULL值,否则报错。
-
变量取值
通过指定下标方式可获取变量中对应下标的成员值,若通过下标找不到该成员则会返回no data found的错误信息。
说明:
- 非兼容A模式下(参数sql_compatibility值不为A),不支持创建带索引集合类型。
- 支持在匿名块、存储过程、自定义函数、package中定义带索引集合类型,其作用域各不相同。不支持在schema中定义带索引集合类型。
- NOT NULL只支持语法不支持功能。
- char、vachar、numeric、float、number等元素类型的范围约束语法创建集合类型,例如:“type t1 is table of numeric(5) index by int; ”只支持语法创建,不支持元素的范围约束功能,功能等同于“create type t1 is table of numeric;”。
- data_type可以为基础数据类型,或存储过程内定义的record类型,集合类型,数组类型,不支持ref cursor类型。
- indexby_type仅支持integer和varchar,其中varchar的长度暂不约束。
- 未初始化的带索引集合类型变量非NULL。
- 带索引集合类型变量不能赋NULL值,否则报错。
- 带索引集合类型变量作为入参不能赋NULL值或''。
- 不同的带索引集合类型的变量不能相互赋值。即使成员类型和下标类型相同,但集合类型名称不同,也是不同的集合类型。如 TYPE t1 IS TABLE OF int index by int; 和 TYPE t2 IS TABLE OF int index by int; 定义的两个集合类型,t1和t2是不同的集合类型,以其定义的变量不支持相互赋值。
- 带索引集合类型不支持关系运算和算数运算操作。
- select … bulk collect into 方式赋值带索引集合类型变量时,只支持下标为integer类型的集合类型,下标为varchar类型集合不支持。
- 支持带索引集合类型变量作为存储过程的参数,此时要求参数类型是在package中定义的集合类型。
- 带索引的集合作为函数入参时,可以传入对应子元素类型相同的数组类型作为入参,不支持多维数组,不支持索引类型为varcahr(过时的方法,不建议使用该功能。可执行“set behavior_compat_options = 'disable_rewrite_nesttable';”禁用)。
- 类型构造器目前仅支持集合类型,其参数个数的上限与用户自定义函数参数个数上限相同。对于带索引的集合类型,构造器在使用时索引的值仅支持为常量。
- 不支持对XML类型数据操作。
示例
示例1:无索引的集合类型。
--演示在存储过程中对集合进行操作。
MogDB=# CREATE OR REPLACE PROCEDURE table_proc AS
DECLARE
TYPE TABLE_INTEGER IS TABLE OF INTEGER;--定义集合类型
TABLEINT TABLE_INTEGER := TABLE_INTEGER(); --声明集合类型的变量
BEGIN
TABLEINT.extend(10);
FOR I IN 1..10 LOOP
TABLEINT(I) := I;
END LOOP;
RAISE NOTICE '%', TABLEINT.COUNT;
RAISE NOTICE '%', TABLEINT(1);
RAISE NOTICE '%', TABLEINT(10);
END;
/
--调用该存储过程。
MogDB=# CALL table_proc();
--删除存储过程。
MogDB=# DROP PROCEDURE table_proc;
--演示在存储过程中对嵌套集合进行操作。
MogDB=# CREATE OR REPLACE PROCEDURE nest_table_proc AS
DECLARE
TYPE TABLE_INTEGER IS TABLE OF INTEGER;--定义集合类型
TYPE NEST_TABLE_INTEGER IS TABLE OF TABLE_INTEGER;--定义集合类型
NEST_TABLE_VAR NEST_TABLE_INTEGER := NEST_TABLE_INTEGER(); --声明嵌套集合类型的变量
BEGIN
NEST_TABLE_VAR.extend(10);
FOR I IN 1..10 LOOP
NEST_TABLE_VAR(I) := TABLE_INTEGER();
NEST_TABLE_VAR(I)(I) := I;
END LOOP;
RAISE NOTICE '%', NEST_TABLE_VAR.COUNT;
RAISE NOTICE '%', NEST_TABLE_VAR(1)(1);
RAISE NOTICE '%', NEST_TABLE_VAR(10)(10);
END;
/
--调用该存储过程。
MogDB=# CALL nest_table_proc();
--删除存储过程。
MogDB=# DROP PROCEDURE nest_table_proc;
示例2:带索引的集合类型。
--演示在存储过程中对带索引集合进行操作。
MogDB=# CREATE OR REPLACE PROCEDURE index_table_proc AS
DECLARE
TYPE TABLE_INTEGER IS TABLE OF INTEGER INDEX BY INTEGER; --定义集合类型
TYPE TABLE_VARCHAR IS TABLE OF INTEGER INDEX BY VARCHAR; --定义集合类型
TABLEINT_01 TABLE_INTEGER; --声明集合类型变量,未初始化
TABLEINT_02 TABLE_INTEGER := TABLE_INTEGER(); --声明集合类型变量,初始化为空
TABLEINT_03 TABLE_INTEGER := TABLE_INTEGER(); --声明集合类型变量,初始化为空
RES INTEGER;
BEGIN
TABLEINT_03(2) := 3; --初始化指定值
TABLEINT_03(3) := 4; --初始化指定值
FOR I IN 1..10 LOOP
TABLEINT_01(I) := I; --成员赋值
TABLEINT_02(I) := I + 1; --成员赋值
END LOOP;
TABLEINT_01 := TABLEINT_02; --整体赋值
RES := TABLEINT_03(2); --取值
RAISE NOTICE '%', RES;
RAISE NOTICE '%', TABLEINT_01(1);
RAISE NOTICE '%', TABLEINT_01(10);
END;
/
--调用该存储过程。
MogDB=# CALL index_table_proc();
--删除存储过程。
MogDB=# DROP PROCEDURE index_table_proc;
--演示在存储过程中对嵌套集合进行操作。
MogDB=# CREATE OR REPLACE PROCEDURE nest_table_proc AS
DECLARE
TYPE TABLE_INTEGER IS TABLE OF INTEGER INDEX BY INTEGER; --定义集合类型
TYPE NEST_TABLE_INTEGER IS TABLE OF TABLE_INTEGER INDEX BY INTEGER;--定义集合类型
NEST_TABLE_VAR NEST_TABLE_INTEGER; --声明嵌套集合类型的变量
BEGIN
FOR I IN 1..10 LOOP
NEST_TABLE_VAR(I)(I) := I;
END LOOP;
RAISE NOTICE '%', NEST_TABLE_VAR.COUNT;
RAISE NOTICE '%', NEST_TABLE_VAR(1)(1);
RAISE NOTICE '%', NEST_TABLE_VAR(10)(10);
END;
/
--调用该存储过程。
MogDB=# CALL nest_table_proc();
--删除存储过程。
MogDB=# DROP PROCEDURE nest_table_proc;
集合支持的函数
集合操作符
-
=
参数:nesttable类型
返回值:true or false,bool类型
功能描述:两个集合类型是否相等。
示例:
MogDB=# declare MogDB-# type nest is table of int; MogDB-# a nest := nest(1,2); MogDB-# b nest := nest(1,2); MogDB-# flag bool; MogDB-# begin MogDB$# flag := a = b; MogDB$# raise info '%', flag; MogDB$# end; MogDB$# / INFO: t ANONYMOUS BLOCK EXECUTE
-
<>
参数:nesttable类型
返回值:true or false,bool类型
功能描述:两个集合类型是否不相等。
示例:
MogDB=# declare MogDB-# type nest is table of int; MogDB-# a nest := nest(1,2); MogDB-# b nest := nest(1,2); MogDB-# flag bool; MogDB-# begin MogDB$# flag := a <> b; MogDB$# raise info '%', flag; MogDB$# end; MogDB$# / INFO: f ANONYMOUS BLOCK EXECUTE
集合MULTISET函数
-
MULTISET UNION [ALL | DISTINCT]
参数:nesttable类型
返回值:nesttable类型
功能描述:两个集合变量的并集,ALL不去除重复元素,DISTINCT去除重复元素。
示例:
MogDB=# declare MogDB-# type nest is table of int; MogDB-# a nest := nest(1,2); MogDB-# b nest := nest(2,3); MogDB-# begin MogDB$# a := a MULTISET UNION ALL b; MogDB$# raise info '%', a; MogDB$# end; MogDB$# / INFO: {1,2,2,3} ANONYMOUS BLOCK EXECUTE MogDB=# declare MogDB-# type nest is table of int; MogDB-# a nest := nest(1,2); MogDB-# b nest := nest(2,3); MogDB-# begin MogDB$# a := a MULTISET UNION DISTINCT b; MogDB$# raise info '%', a; MogDB$# end; MogDB$# / INFO: {1,2,3} ANONYMOUS BLOCK EXECUTE
-
MULTISET EXCEPT [ALL | DISTINCT]
参数:nesttable类型
返回值:nesttable类型
功能描述:两个集合变量的差集。如A MULTISET EXCEPT B:ALL表示去除A中与B重复的元素;DISTINCT表示先对A进行去重操作,然后去除与B中有重复的元素。
示例:
MogDB=# declare MogDB-# type nest is table of int; MogDB-# a nest := nest(1,2,2); MogDB-# b nest := nest(2,3); MogDB-# begin MogDB$# a := a MULTISET EXCEPT ALL b; MogDB$# raise info '%', a; MogDB$# end; MogDB$# / INFO: {1,2} ANONYMOUS BLOCK EXECUTE MogDB=# declare MogDB-# type nest is table of int; MogDB-# a nest := nest(1,2,2); MogDB-# b nest := nest(2,3); MogDB-# begin MogDB$# a := a MULTISET EXCEPT DISTINCT b; MogDB$# raise info '%', a; MogDB$# end; MogDB$# / INFO: {1} ANONYMOUS BLOCK EXECUTE
-
MULTISET INTERSECT [ALL | DISTINCT]
参数:nesttable类型
返回值:nesttable类型
功能描述:两个集合变量的交集。如 A MULTISET INTERSECT B:ALL表是取A与B所有重复的元素;DISTINCT表示取A与B中重复元素,且去除重复元素。
示例:
MogDB=# declare MogDB-# type nest is table of int; MogDB-# a nest := nest(1,2,2); MogDB-# b nest := nest(2,2,3); MogDB-# begin MogDB$# a := a MULTISET INTERSECT ALL b; MogDB$# raise info '%', a; MogDB$# end; MogDB$# / INFO: {2,2} ANONYMOUS BLOCK EXECUTE MogDB=# declare MogDB-# type nest is table of int; MogDB-# a nest := nest(1,2,2); MogDB-# b nest := nest(2,2,3); MogDB-# begin MogDB$# a := a MULTISET INTERSECT DISTINCT b; MogDB$# raise info '%', a; MogDB$# end; MogDB$# / INFO: {2} ANONYMOUS BLOCK EXECUTE
集合类型函数
-
exists(idx)
参数:idx为int4类型或varchar类型,
返回值:true or false,bool类型
功能描述:查找指定位置是否存在有效元素。
示例:
MogDB=# declare MogDB-# type nest is table of varchar2; MogDB-# a nest := nest('happy','?'); MogDB-# flag bool; MogDB-# begin MogDB$# flag := a.exists(1); MogDB$# raise info '%', flag; MogDB$# flag := a.exists(10); MogDB$# raise info '%', flag; MogDB$# end; MogDB$# / INFO: t INFO: f ANONYMOUS BLOCK EXECUTE MogDB=# declare MogDB-# type nest is table of varchar2 index by varchar2; MogDB-# a nest; MogDB-# flag bool; MogDB-# begin MogDB$# a('1') := 'Be'; MogDB$# a('2') := 'happy'; MogDB$# a('3') := '.'; MogDB$# flag := a.exists('1'); MogDB$# raise info '%', flag; MogDB$# flag := a.exists('ddd'); MogDB$# raise info '%', flag; MogDB$# end; MogDB$# / INFO: t INFO: f ANONYMOUS BLOCK EXECUTE
-
extend[(e)]
参数:e为int4类型
返回值:无返回值
功能描述:仅支持nesttable类型。在nesttable变量末尾拓展1个元素。
约束:嵌套场景不支持extend()。
示例:
MogDB=# declare MogDB-# type nest is table of int; MogDB-# a nest := nest(1); MogDB-# begin MogDB$# raise info '%', a; MogDB$# a.extend; MogDB$# raise info '%', a; MogDB$# end; MogDB$# / INFO: {1} INFO: {1,NULL} ANONYMOUS BLOCK EXECUTE MogDB=# declare MogDB-# type nest is table of int; MogDB-# a nest := nest(1); MogDB-# begin MogDB$# raise info '%', a; MogDB$# a.extend(2); MogDB$# raise info '%', a; MogDB$# end; MogDB$# / INFO: {1} INFO: {1,NULL,NULL} ANONYMOUS BLOCK EXECUTE
-
delete[(idx)]
参数:idx为int4类型或varchar2类型
返回值:无返回值
功能描述:无参数时,(nesttable)删除集合类型的所有元素和空间,后续使用需要重新extend,(indexbytable)删除所有元素内容,一个参数删除指定位置元素(不删除空间)。
约束:嵌套场景不支持delete()。
示例:
MogDB=# declare MogDB-# type nest is table of int; MogDB-# a nest := nest(1,2,3,4,5); MogDB-# begin MogDB$# raise info '%', a; MogDB$# a.delete; MogDB$# raise info '%', a; MogDB$# end; MogDB$# / INFO: {1,2,3,4,5} INFO: {} ANONYMOUS BLOCK EXECUTE MogDB=# declare MogDB-# type nest is table of int; MogDB-# a nest := nest(1,2,3,4,5); MogDB-# begin MogDB$# raise info '%', a; MogDB$# a.delete(3); MogDB$# raise info '%', a; MogDB$# end; MogDB$# / INFO: {1,2,3,4,5} INFO: {1,2,4,5} ANONYMOUS BLOCK EXECUTE
-
trim[(n)]
参数:n为int4类型
返回值:无返回值
功能描述:仅支持nesttable类型,无参数时,删除末尾一个元素空间,输入参数合法时,删除末尾指定数量元素空间。
约束:嵌套场景不支持trim()。
示例:
MogDB=# declare MogDB-# type nest is table of int; MogDB-# aa nest:=nest(11,22,33,44,55); MogDB-# begin MogDB$# raise info 'aa:%' ,aa; MogDB$# aa.trim; MogDB$# raise info 'aa:%' ,aa; MogDB$# aa.trim(2); MogDB$# raise info 'aa:%' ,aa; MogDB$# end; MogDB$# / INFO: aa:{11,22,33,44,55} INFO: aa:{11,22,33,44} INFO: aa:{11,22} ANONYMOUS BLOCK EXECUTE
-
count
参数:无
返回值:int类型
功能描述:返回集合中存在有效元素的个数。
示例:
MogDB=# declare MogDB-# type nest is table of int; MogDB-# aa nest:=nest(11,22,33,44,55); MogDB-# begin MogDB$# raise info 'count:%' ,aa.count; MogDB$# end; MogDB$# / INFO: count:5 ANONYMOUS BLOCK EXECUTE MogDB=# declare MogDB-# type nest is table of int index by varchar; MogDB-# aa nest; MogDB-# begin MogDB$# aa('aaa') := 111; MogDB$# aa('bbb') := 222; MogDB$# aa('ccc') := 333; MogDB$# raise info 'count:%' ,aa.count; MogDB$# end; MogDB$# / INFO: count:3 ANONYMOUS BLOCK EXECUTE
-
first
参数:无
返回值:int类型或varchar类型
功能描述:返回集合中第一个有效元素的下标。
示例:
MogDB=# declare MogDB-# type nest is table of int; MogDB-# aa nest:=nest(11,22,33,44,55); MogDB-# begin MogDB$# raise info 'first:%' ,aa.first; MogDB$# end; MogDB$# / INFO: first:1 ANONYMOUS BLOCK EXECUTE MogDB=# declare MogDB-# type nest is table of int index by varchar; MogDB-# aa nest; MogDB-# begin MogDB$# aa('aaa') := 111; MogDB$# aa('bbb') := 222; MogDB$# aa('ccc') := 333; MogDB$# raise info 'first:%' ,aa.first; MogDB$# end; MogDB$# / INFO: first:aaa ANONYMOUS BLOCK EXECUTE
-
last
参数:无
返回值:int类型或varchar类型
功能描述:返回集合中最后一个有效元素的下标。
示例:
MogDB=# declare MogDB-# type nest is table of int; MogDB-# aa nest:=nest(11,22,33,44,55); MogDB-# begin MogDB$# raise info 'last:%' ,aa.last; MogDB$# end; MogDB$# / INFO: last:5 ANONYMOUS BLOCK EXECUTE MogDB=# declare MogDB-# type nest is table of int index by varchar; MogDB-# aa nest; MogDB-# begin MogDB$# aa('aaa') := 111; MogDB$# aa('bbb') := 222; MogDB$# aa('ccc') := 333; MogDB$# raise info 'last:%' ,aa.last; MogDB$# end; MogDB$# / INFO: last:ccc ANONYMOUS BLOCK EXECUTE
-
prior(idx)
参数:idx为int类型或varchar类型
返回值:int类型或varchar类型
功能描述:返回集合中当前下标的前一个有效元素下标。
示例:
MogDB=# declare MogDB-# type nest is table of int; MogDB-# aa nest:=nest(11,22,33,44,55); MogDB-# begin MogDB$# raise info 'prior:%' ,aa.prior(3); MogDB$# end; MogDB$# / INFO: prior:2 ANONYMOUS BLOCK EXECUTE MogDB=# declare MogDB-# type nest is table of int index by varchar; MogDB-# aa nest; MogDB-# begin MogDB$# aa('aaa') := 111; MogDB$# aa('bbb') := 222; MogDB$# aa('ccc') := 333; MogDB$# raise info 'prior:%' ,aa.prior('bbb'); MogDB$# end; MogDB$# / INFO: prior:aaa ANONYMOUS BLOCK EXECUTE
-
next(idx)
参数:idx为int类型或varchar类型
返回值:int类型或varchar类型
功能描述:返回集合中当前下标的后一个有效元素下标。
示例:
MogDB=# declare MogDB-# type nest is table of int; MogDB-# aa nest:=nest(11,22,33,44,55); MogDB-# begin MogDB$# raise info 'next:%' ,aa.next(3); MogDB$# end; MogDB$# / INFO: next:4 ANONYMOUS BLOCK EXECUTE MogDB=# declare MogDB-# type nest is table of int index by varchar; MogDB-# aa nest; MogDB-# begin MogDB$# aa('aaa') := 111; MogDB$# aa('bbb') := 222; MogDB$# aa('ccc') := 333; MogDB$# raise info 'next:%' ,aa.next('bbb'); MogDB$# end; MogDB$# / INFO: next:ccc ANONYMOUS BLOCK EXECUTE
-
limit
参数:无
返回值:null
功能描述:用于nesttable类型,返回集合中最大可以储存的元素个数,只适用于array类型,nesttable返回空。
示例:
MogDB=# declare MogDB-# type nest is table of int; MogDB-# aa nest:=nest(11,22,33,44,55); MogDB-# begin MogDB$# raise info 'limit:%' ,aa.limit; MogDB$# end; MogDB$# / INFO: limit:<NULL> ANONYMOUS BLOCK EXECUTE
record
record类型的变量
创建一个record变量的方式:
定义一个record类型 ,然后使用该类型来声明一个变量。
语法
record类型的语法参见图1。
对以上语法格式的解释如下:
- record_type: 声明的类型名称。
- field: record类型中的成员名称。
- datatype: record类型中成员的类型。
- expression: 设置默认值的表达式。
说明:
在MogDB中:
- record类型变量的赋值支持:
- 在函数或存储过程的声明阶段,声明一个record类型,并且可以在该类型中定义成员变量。
- 一个record变量到另一个record变量的赋值。
- SELECT INTO和FETCH向一个record类型的变量中赋值。
- 将一个NULL值赋值给一个record变量。
- 不支持INSERT和UPDATE语句使用record变量进行插入数据和更新数据。
- 如果成员有复合类型,在声明阶段不支持指定默认值,该行为同声明阶段的变量一样。
- date_type也可以为存储过程中定义的record类型、数组类型和集合类型(匿名块不支持)。
示例
下面示例中用到的表定义如下:
MogDB=# \d emp_rec
Table "public.emp_rec"
Column | Type | Modifiers
----------+--------------------------------+-----------
empno | numeric(4,0) | not null
ename | character varying(10) |
job | character varying(9) |
mgr | numeric(4,0) |
hiredate | timestamp(0) without time zone |
sal | numeric(7,2) |
comm | numeric(7,2) |
deptno | numeric(2,0) |
--演示在函数中对数组进行操作。
MogDB=# CREATE OR REPLACE FUNCTION regress_record(p_w VARCHAR2)
RETURNS
VARCHAR2 AS $$
DECLARE
--声明一个record类型.
type rec_type is record (name varchar2(100), epno int);
employer rec_type;
--使用%type声明record类型
type rec_type1 is record (name emp_rec.ename%type, epno int not null :=10);
employer1 rec_type1;
--声明带有默认值的record类型
type rec_type2 is record (
name varchar2 not null := 'SCOTT',
epno int not null :=10);
employer2 rec_type2;
CURSOR C1 IS select ename,empno from emp_rec order by 1 limit 1;
BEGIN
--对一个record类型的变量的成员赋值。
employer.name := 'WARD';
employer.epno = 18;
raise info 'employer name: % , epno:%', employer.name, employer.epno;
--将一个record类型的变量赋值给另一个变量。
employer1 := employer;
raise info 'employer1 name: % , epno: %',employer1.name, employer1.epno;
--将一个record类型变量赋值为NULL。
employer1 := NULL;
raise info 'employer1 name: % , epno: %',employer1.name, employer1.epno;
--获取record变量的默认值。
raise info 'employer2 name: % ,epno: %', employer2.name, employer2.epno;
--在for循环中使用record变量
for employer in select ename,empno from emp_rec order by 1 limit 1
loop
raise info 'employer name: % , epno: %', employer.name, employer.epno;
end loop;
--在select into 中使用record变量。
select ename,empno into employer2 from emp_rec order by 1 limit 1;
raise info 'employer name: % , epno: %', employer2.name, employer2.epno;
--在cursor中使用record变量。
OPEN C1;
FETCH C1 INTO employer2;
raise info 'employer name: % , epno: %', employer2.name, employer2.epno;
CLOSE C1;
RETURN employer.name;
END;
$$
LANGUAGE plpgsql;
--调用该函数。
MogDB=# CALL regress_record('abc');
--删除函数。
MogDB=# DROP FUNCTION regress_record;