华为云用户手册

  • 连接D CS 集群实例 from redis.cluster import RedisCluster as Redis from redis.cluster import ClusterNode redis_client = None def create_redis_client(context): logger = context.getLogger() redis_cluster_nodes = context.getUserData( "redis_ip_address") redis_password = context.getUserData( "redis_password") startup_nodes = [] for redis_node in redis_cluster_nodes.split(','): node_info = redis_node.split(":") startup_nodes.append(ClusterNode(host=node_info[0], port=node_info[1])) logger.info("redis startup_nodes={}".format(startup_nodes)) client = Redis(startup_nodes=startup_nodes, password=redis_password, cluster_error_retry_attempts=3, socket_timeout=2, socket_connect_timeout=2, health_check_interval=60, max_connections=50, decode_responses=True) return client def initializer(context): global redis_client redis_client = create_redis_client(context) redis_client.ping() def handler(event, context): logger = context.getLogger() redis_client.set('foo', 'bar') value = redis_client.get('foo') logger.info("redis get key foo value={}".format(value)) return value 表1 RedisCluster配置 参数 默认值 说明 host localhost 连接Redis实例的IP地址/ 域名 port 6379 连接端口号 cluster_error_retry_attempts 3 当遇到TimeoutError、ConnectionError或ClusterDownError时,在抛出异常之前重试的次数 其他参数配置可以参考表3。 父主题: 示例代码
  • Redis健康检查 Redis健康检查的作用是判断Redis服务端是否正常工作,使用health_check_interval配置对Redis进行定时健康检查,该配置单位为秒,默认值为0不进行健康检查,代码如下: retry = Retry(ExponentialBackoff(), 3) pool = BlockingConnectionPool(host=redis_host, port=redis_port, password=redis_password, max_connections=50, timeout=3, socket_timeout=2, socket_connect_timeout=2, retry=retry, retry_on_error=[BusyLoadingError, ConnectionError, TimeoutError], health_check_interval=60, decode_responses=True) 如果业务量大建议不适用该配置,进而减少开销。 父主题: 代码解读
  • 绑定微服务网关 登录CAE控制台。 在左侧导航栏中选择“系统设置”。 单击“微服务网关配置”模块中的“编辑”,进入“微服务网关配置”页面。 在右侧页面中选择微服务网关。 已存在的微服务网关不满足业务需求时: 1、单击“前往微服务网关控制台”,进入微服务引擎控制台。 2、根据需求创建微服务网关。 图1 配置微服务网关 单击“保存”,页面提示“创建微服务网关配置成功”。 等待微服务网关状态变成可用时,表示绑定成功。
  • 获取修改后Nginx配置文件 由于此最佳实践仅支持root用户运行的镜像,官方的Nginx镜像使用nginx用户运行,您需要将nginx运行用户改为root。 已经为您修改了以root用户运行的配置,您可以通过以下链接下载“nginx.conf”文件进行替换。 下载地址:https://test-open-obs.obs.cn-east-3.myhuaweicloud.com/nginx.conf
  • 配置 云存储 挂载路径 返回CAE控制台,选择“组件配置”。 在“组件配置”页面上方的下拉框中选择Nginx组件。 单击“云存储配置”模块中的“编辑”,进入云存储配置页面。 图8 配置云存储 在“云存储配置”页面单击“配置并行文件系统”,并输入挂载路径并设置权限。 挂载路径:数据存储挂载到组件上的路径。本实践使用“nginx”默认路径“/usr/share/nginx/html”。 权限:挂载路径及挂载路径下文件,有“读写”、“只读”两种权限,此处选择“读写”。 图9 配置云存储挂载路径 挂载静态文件路径到云存储上时需要注意:请不要挂载到含有系统文件的目录下,如“/”、“/var/run”等,否则可能会导致部署的组件异常。 挂载路径选择权限时需要注意:读写权限表示组件对于该挂载路径及路径下的所有文件拥有读写权限,只读即只有只读权限。 单击“添加挂载路径”,通过配置挂载子路径修改Nginx配置文件。 挂载路径:“/etc/nginx/nginx.conf”。 子路径:“nginx.conf”。 权限:选择“读写”权限。 图10 配置挂载子路径 单击“确定”后在“云存储配置”页面再次单击“确定”,完成配置。 在“组件配置”页面单击“生效配置”。 图11 生效配置
  • 历史版本 云堡垒机 实例历史版本功能包括身份认证、权限控制、账号管理、安全审计。 表3 历史规格/性能说明 版本 资产数 并发数 CPU 内存 硬盘 标准版 20 20 1核 4GB 100GB 专业版 50 50 2核 4GB 200GB 企业版 100 100 4核 8GB 400GB 高级版 200 200 4核 8GB 800GB 旗舰版 无限制 无限制 8核 16GB 1TB 鲲鹏版 20 20 2核 4GB 200GB 鲲鹏版 50 20 2核 4GB 500GB 表 历史规格/性能说明中的“并发数”是基于字符协议客户端运维(如SSH客户端、MySQL客户端)的并发数,基于图形协议运维(如H5 Web运维、RDP客户端运维)的并发数只有该值的1/3。
  • 实例版本规格 表1 不同版本功能 功能版本 功能说明 标准版 基础功能:身份认证、权限控制、账号管理、安全审计 专业版 基础功能:身份认证、权限控制、账号管理、安全审计 增强功能:自动化运维、数据库运维审计 表2 不同规格配置说明 资产数 最大并发数 CPU 内存 系统盘 数据盘 10 10 4核 8GB 100GB 200GB 20 20 4核 8GB 100GB 200GB 50 50 4核 8GB 100GB 500GB 100 100 4核 8GB 100GB 1000GB 200 200 4核 8GB 100GB 1000GB 500 500 8核 16GB 100GB 2000GB 1000 1000 8核 16GB 100GB 2000GB 2000 1500 8核 16GB 100GB 2000GB 5000 2000 16核 32GB 100GB 3000GB 10000 2000 16核 32GB 100GB 4000GB 表 不同规格配置说明中的“并发数”是基于字符协议客户端运维(如SSH客户端、MySQL客户端)的并发数,基于图形协议运维(如H5 Web运维、RDP客户端运维)的并发数只有该值的1/3。
  • 华为云账号可以登录云 堡垒机 系统吗? 不可以。 华为云账号是真实的个人或企业登录华为云的账号信息,关联订单信息、费用信息等,用于登录控制台、管理云上资源等。创建和管理云堡垒机实例,即需先通过华为云账号登录控制台。 云堡垒机用户账号是云堡垒机系统内账号,仅用于登录云堡垒机系统,适用于企业人员管理,权限分配,运维审计等场景。 云堡垒机用户账号是独立于华为云账号以外的账号,且不与华为云关联。即华为云账号不能直接用于登录云堡垒机系统。 父主题: 登录方式及密码类
  • LDAP认证 管理员配置LDAP认证方式,并创建LDAP认证用户。使用“密码登录”验证LDAP用户账户和密码时,通过轻量级目录访问协议,由第三方认证服务器对系统用户进行身份认证。 基本原理:LDAP基于TCP/IP协议的目录访问协议,是Internet上目录服务的通用访问协议,形式一个树状目录类的数据库。 IP:LDAP服务器的IP地址。 端口:根据实际情况选择,默认选择389端口。 用户OU:LDAP中树状形式的组织信息,DN是分支节点到根目录的路径,Base_DN则是基准DN,即LDAP搜索的起始DN为用户的组织单元ou。例如:如果开始搜索的DN的组织单元为ou1,则Base_DN为ou=ou1,o=O。 系统LDAP认证配置操作说明请参见配置LDAP认证。
  • RADIUS认证 管理员配置RADIUS系统认证方式,并创建RADIUS认证用户。使用“密码登录”验证RADIUS用户账户和密码时,通过RADIUS协议,由第三方认证服务器对系统用户进行身份认证。 基本原理:通过远程网络接入设备的用户,与包含用户认证和配置信息的服务器之间,采用用户/服务器模式交换信息标准,执行认证业务。 IP:RADIUS服务器的IP地址。 端口:根据实际情选择,默认选择1812端口。 认证共享密钥:RADIUS的认证密码。 测试:用RADIUS的账号密码做测试。 系统RADIUS认证配置操作说明请参见配置RADIUS认证。
  • Azure AD认证 管理员需先在Azure平台创建企业应用程序,并将平台用户加入企业应用程序;再在云堡垒机系统配置Azure AD认证,并添加Azure平台已加入应用程序的用户。使用Azure认证入口验证用户身份时,跳转到Azure登录窗口,输入用户账号和密码,由第三方认证平台验证通过后,跳转登录云堡垒机系统。 基本原理:Azure AD认证基于SAML协议,通过在Azure平台配置企业应用程序,将Azure AD用作企业使用的应用程序的标识,认证登录用户身份。 系统Azure AD认证配置操作说明请参见配置Azure AD认证。
  • 系统资源账户有哪些状态? 云堡垒机系统被纳管资源的账户状态,用于标识资源账户的密码是否被验证,且验证是否通过,不能手动修改,可通过实时验证和自动巡检更新。 资源账户共有“正常”、“异常”和“未知”三种状态,各状态详细说明请参见表1。 表1 资源账户状态说明 状态 说明 正常 经过“验证”,账号及密码正确,且能正常登录的资源账户,显示为“正常”状态。 异常 经过“验证”,账户或密码不正确,可能不能正常登录的资源账户,显示为“异常”状态。 未知 添加完资源账户后,未经过“验证”的资源账户,显示为“未知”状态。 云堡垒机自动巡检: 在每月的5号、15号和25号凌晨一点,对纳管的资源账户进行账号巡检,通过检测资源账户的连通性,标记资源账户状态。 连通性良好,能正常登录的账户显示为“正常”。 不能连接,无法正常登录的账户显示为“异常”。 父主题: 资源添加类
  • 云堡垒机允许多用户同时登录同一资源吗? 云堡垒机本身允许多用户同时登录同一资源,即不限制登录资源的用户数量。但受限于资源的多用户登录配置,多个云堡垒机用户不能同时登录同一资源账户。 例如,受限于Windows资源的多用户同时登录配置,同时登录Windows资源的用户数量有最大限额。Windows 2008和Windows 2012服务器默认仅支持两个用户同时登录,即被CBH系统纳管的Windows服务器默认最多允许两个用户同时登录。 为解除资源多用户同时登录限制,您可以选择如下方式解决: 配置资源服务器允许多用户登录。例如,在Windows服务器配置远程桌面会话主机和远程桌面授权,详情请参见ECS多用户登录。 在资源服务器创建多个账号,并纳管为云堡垒机资源账户后,再分别授权给用户。 父主题: 运维管理
  • 判断方法 如果您的DDoS高防同时遭受到CC攻击和DDoS攻击时,可参照以下方法快速判断遭受的攻击类型: 登录管理控制台。 单击“DDoS攻击防护”页签。 单击“DDoS攻击防护”、“CC攻击防护”,通过查看相应的流量报表信息,判断攻击类型: 攻击类型 DDoS攻击防护流量报表信息 CC攻击防护流量报表信息 DDoS攻击 报表中有攻击流量的波动。 已触发流量清洗。 报表中没有相关联的流量波动。 CC攻击 报表中有攻击流量的波动。 已触发流量清洗。 报表中有相关联的流量波动。
  • AAD权限 默认情况下,管理员创建的 IAM 用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。 AAD部署时不区分物理区域,为全局级服务。授权时,在全局级服务中设置权限,访问AAD时,不需要切换区域。 根据授权精细程度分为角色和策略。 角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。由于华为云各服务之间存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。 策略:IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:针对AAD服务,管理员能够控制IAM用户仅能对某一类云服务器资源进行指定的管理操作。多数细粒度策略以API接口为粒度进行权限拆分,AAD支持的授权项请参见AAD权限及授权项。 如表1所示,包括了AAD的所有系统角色。 表1 AAD系统角色 系统角色/策略名称 描述 类别 依赖关系 CAD Administrator DDoS高防服务 的管理员权限。 系统角色 进行付费操作(例如,购买DDoS高防实例、升级规格)时需要同时具有CAD Administrator和BSS Administrator角色,或具有Tenant Administrator角色。 BSS Administrator:费用中心、资源中心、帐号中心的所有执行权限。项目级角色,在同项目中勾选。 Tenant Administrator:除 统一身份认证 服务外,其他所有服务的所有执行权限。 须知: CAD Administrator系统角色即将下线,为了确保正常使用AAD,建议您尽快授予用户AAD FullAccess或AAD ReadOnlyAccess系统策略。 AAD FullAccess DDoS高防服务所有权限。 系统策略 进行付费操作(例如,购买DDoS高防实例、升级规格)时需要同时具有AAD FullAccess和BSS Administrator角色,或具有Tenant Administrator角色。 BSS Administrator:费用中心、资源中心、帐号中心的所有执行权限。项目级角色,在同项目中勾选。 Tenant Administrator:除统一身份认证服务外,其他所有服务的所有执行权限。 AAD ReadOnlyAccess DDoS高防服务只读权限,拥有该权限的用户仅能查看DDoS高防。 系统策略 无。
  • AAD ReadOnlyAccess策略内容 { "Version": "1.1", "Statement": [{ "Action": [ "aad:*:get", "aad:*:list" ], "Effect": "Allow" }] }
  • CNAD权限 默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。 CNAD部署时不区分物理区域,为全局级服务。授权时,在全局级服务中设置权限,访问CNAD时,不需要切换区域。 根据授权精细程度分为角色和策略。 角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。由于华为云各服务之间存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。 策略:IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:针对CNAD服务,管理员能够控制IAM用户仅能对某一类云服务器资源进行指定的管理操作。多数细粒度策略以API接口为粒度进行权限拆分,CNAD支持的授权项请参见CNAD权限及授权项。 如表1所示,包括了CNAD的所有系统角色。 表1 CNAD系统角色 系统角色/策略名称 描述 类别 依赖关系 CNAD FullAccess DDoS原生高级防护所有权限。 系统策略 进行付费操作(例如,购买DDoS原生高级防护实例)时需要同时具有CNAD FullAccess和BSS Administrator角色,或者具有Tenant Administrator角色。 CNAD ReadOnlyAccess DDoS原生高级防护只读权限。 系统策略 无。
  • CNAD FullAccess策略内容 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "cnad:*:*" ] } ] }
  • CNAD ReadOnlyAccess策略内容 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "cnad:*:get*", "cnad:*:list*" ] } ] }
  • 查看DDoS数据报表 DDoS控制台提供防护监控数据。用户可以通过DDoS控制台查看防护资源的监控信息。详细如下: 子服务 监控对象 监控内容 详细 DDoS原生基础防护 公网IP 包括当前防护状态、当前防护配置参数、24小时的流量情况、24小时的异常事件等。 查看Anti-DDoS监控报表 DDoS原生高级防护 防护对象 包括实例的接收流量、攻击流量,以及DDoS防护趋势图、清洗流量峰值、攻击类型分布、TOP10被攻击IP等信息 查看/下载CNAD防护数据报表 DDoS高防 高防IP 防护域名 DDoS攻击防护 可以查看高防实例线路的高防入流量峰值、攻击流量峰值和DDoS攻击次数信息,以及流量和报文两个维度的攻击类型分布、DDoS攻击事件、TOP5攻击类型流量清洗等信息。 CC攻击防护 可以查看防护域名请求与攻击次数、攻击类型分布、TOP5攻击源IP的次数等信息。 查看DDoS高防防护日志
  • 示例流程 图1 给用户授权服务权限流程 创建用户组并授权 在IAM控制台创建用户组,并授予DDoS原生高级防护权限“CNAD FullAccess”。 创建用户并加入用户组 在IAM控制台创建用户,并将其加入1中创建的用户组。 用户登录并验证权限 新创建的用户登录控制台,切换至授权区域,验证权限: 在页面左上方的,选择除DDoS原生高级防护外(假设当前策略仅包含“CNAD FullAccess”)的任一服务,若提示权限不足,表示“CNAD FullAccess”已生效。
  • 标识符介绍 标识符用来命名对象,例如表名、列名、变量、游标、类型和子程序。标识符必须由字母、数字、和“_”组成,且必须由字母或“_”开头。标识符不区分大小写,每种数据库的标识符最大长度限制不同,目前取各数据库限制的最小长度限制标识符的长度。许多标识符对SQL有特殊意义,即保留字(或关键字),使用这些单词命名的标识符是非法的。 规则:对象的标识符的长度不要超过表1列出的长度。 表1 标识符最大长度 英文名称 中文解释 最大长度 Index Name 索引名称 30 Table Name 表名称 30 User Name 用户名 30 Password 用户名的密码 30 Parameter Name 参数名称 30 Savepoint Name 保存点名称 30 Schema Name 模式名称 30 Variable Name 变量名称 30 Column Name 表列名 30 View Name 视图名称 30 Stored Procedure Name 存储过程名称 30 TableSpace Name 表空间名字 30 Sequence Name 序列的名称 30 父主题: 简介
  • 参数 FROM子句 为SELECT声明一个或者多个源表,它包括下列元素: table_name:一个现在的表或视图的名字(可以有模式修饰)。 alias:为那些包含别名的FROM项目取的别名。别名用于缩写或者在自连接中消除歧义(自连接中同一个表将扫描多次)。如果提供了别名,它就会完全隐藏表或者函数的实际名字。 sub-select:可以在FROM子句中出现SELECT。它的输出作用是为这条SELECT命令,在其生存期里创建一个临时表。这个SELECT必须用圆括弧包围。给这个SELECT语句一个别名。 WHERE子句 可选子句,这里condition可以是任意生成类型为boolean的表达式。任何不满足该条件的行都会从输出中删除。 GROUP BY子句 把所有在组合表达式上拥有相同值的行压缩成一行。expression可以是一个输入字段名字,或者是一个输出字段(SELECT列表项)的名字或序号,或者也可以是任意输入字段组成的表达式。在有歧义的情况下,一个GROUP BY的名字将被解释成输入字段的名字,而不是输出字段的名字。 如果使用了聚集函数,就会对每组中的所有行进行计算并生成一个单独的值。如果出了GROUP BY子句域,SELECT列表表达式中再引用那些没有分组的字段是非法的,除非放在聚集函数里,因为对于未分组的字段,可以会返回多个数值。 HAVING子句 HAVING去除了一些不满足条件的分组行,它与WHERE不同:WHERE在使用GROUP BY之前过滤出单独的行,而HAVING过滤由GROUP BY创建的行。在condition里引用的每个字段都必须无歧义地引用一个分组的行,除非引用出在一个聚集函数里。 HAVING的出现把查询变成一个分组的查询,即使没有GROUP BY子句也是这样。所有选取的行都被认为会形成一个单一的组,而SELECT列表和HAVING子句只能从聚集函数里引用表的字段。这样的查询在HAVING条件为真的时候将发出一个行,如果为非真,则返回0行。 SELECT列表 声明组成SELECT语句的输出行的表达式,可以引用在FROM子句里面计算出来的字段。通过使用子句AS output_name可以为输出字段取个别名。这个别名通常用于输出字段的显示。它也可以用于ORDER BY和GROUP BY子句中引用字段值,但是不能在WHERE或HAVING子句中使用。在WHERE或HAVING子句中必须使用表达式本身。 UNION子句 一般表式为select_statement UNION [ALL] select_statement,这里的select_statement是任意没有ORDER BY、FOR UPDATE子句的SELECT语句。如果用圆括弧包围,ORDER BY可以附着在子表达式里。如果没有圆括弧,这些子句将交给UNION的结果使用,而不是给它们右边的输入表达式。缺省UNION结果不包含任何复的行,除非声明了ALL子句。同一个SELECT语句中的多个UNION操作符是从左向右计算的,除非用圆括弧进行了标识。 INTERSECT子句 一般形式为select_statment INTERSECT select_statment,select_statement是任何不带ORDER BY,。INTERSECT计算涉及的SELECT语句返回的行集合的交集,不含重复的记录。多个INTERSECT计算的优先级同UNION。 EXCEPT子句 一般形式为Select_statement EXCEPT,select_statement是任何没有ORDER BY、FOR UPDATE子句的SELECT表达式。EXCEPT操作符计算存在于左边SELECT语句的输出而不存在于右边SELECT语句输出的行,结果不包含任何重复的记录。多个EXCEPT计算的优先级同UNION。 ORDER BY子句 根据指定的表达式对输出进行升序或降序的排序。如果根据最左边的表达式,两行结果相同,就根据下一个表达式进行比较。依此类推。如果对于所有声明的表达式都相同,则随机顺序返回。 DISTINCT子句 删除输出中所有其他重复的行,仅保留一行。
  • 描述 SELECT将从一个或更多表中返回记录行。SELECT通常的处理如下: 计算列出在FROM中的所有元素(FROM列表中的每个元素都是一个实际的或虚拟的表)。如果在FROM列表里声明了多个元素,它们就交叉连接在一起。请参考FROM子句。 如果声明了WHERE子句,则在输出中消除所有不满足条件的行。请参考WHERE子句。 如果声明了GROUP BY子句,输出就分成匹配一个或多个数值的不同组里。如果出现了HAVING子句,它消除那些不满足给出条件的组。请参GROUP BY子句和HAVING子句。 输出行使用SELECT输出表达式针对每一个选中的行进行计算。请参考SELECT列表。 使用UNION、INTERSECT、EXCEPT可以把多个SELECT语句的输出合并成一个结果集。UNION操作符返回两个结果集的并集。INTERSECT操作符返回两个结果集的交集。EXCEPT操作符返回在第一个结果集对第二个结果集的差集。不管哪种情况,重复的行都被删除,除非声明了ALL 。请参考UNION子句、INTERSECT子句、EXCEPT子句。 如果声明了ORDER BY子句,返回的行将按照指定的顺序排序。如果没有给出ORDER BY,数据行是按照系统认为可以最快生成的顺序给出的。请参ORDER BY子句。 DISTINCT从结果中删除那些重复的行。请参考DISTINCT子句。
  • 语法 SELECT [TOP expression] [| ALL | DISTINCT ] expression [ AS alias] [, ...] [ FROM from_item [, ...] ] [join_clause] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ] [ ORDER BY expression [ ASC | DESC] [LIMIT expression [OFFSET] expression] From_item: table-name [AS alias] view-name[as alias] [sub-query as alias] Join_clause: ,from_item [ INNER | [ {LEFT | RIGHT} [OUTER] ] JOIN [from_item] ON [join-condition]
  • 模式匹配 LIKE模式: String LIKE pattern String NOT LIKE pattern 每个pattern定义一个字符串的集合。如果string包含在pattern代表的字符串集合里,那么LIKE表达式返回真,否则返回假。NOT LIKE与LIKE相反。如果pattern不包含百分号或下划线,那么该模式只代表它本身;这时候LIKE的行为就像等号操作符。在pattern里的下划线(_)匹配任何单个字符;而一个百分号(%)匹配零或多个字符。LIKE模式匹配总是覆盖整个字符串。要匹配在字符串内部任何位置的序列,该模式必须以百分号开头和结尾。 【示例】: 'A_Z' --表示以A开头,以Z结尾,中间为任意一个字符,ABZ、A1Z都满足,但AZ、AXXZ不满足; 'Zhang%' --表示以Zhang开头,后面不跟任何字符或者跟任意多任意字符,如:Zhang、ZhangSan; SELECT NAME FROM USERINFO WHERE NAME LIKE '%AN%'; --查询所有NAME字段中包含AN的名字 父主题: 操作符与表达式
  • 数据类型概览 规则:只使用表1列出的数据类型。 表1 数据类型 分类 名称 描述 存储空间 范围 小整型 TINYINT 单字节整型 1字节 0 ~ 255 短整型 SMALLINT 双字节整型 2字节 -32767~32767 整型 INTEGER 四字节整型 4字节 -2,147,483,647~+2,147,483,647 长整型 BIGINT 八字节整型 8字节 -9,223,372,036,854,775,807~ 9,223,372,036,854,775,807 浮点 REAL,FLOAT4 单精度浮点数,不精准 4字节 -3.402E+38~3.402E+38,6位十进制数字精度 浮点 DOUBLE,PRECISIO,FLOAT8 双精度浮点数,不精准 8字节 -1.79E+308~1.79E+308,15位十进制数字精度 浮点 FLOAT[(p)] 浮点数,不精准。精度p取值范围为[1,53] 说明:p为精度,表示总位数 4字节或8字节 根据精度p不同选择REAL或DOUBLE PRECISION作为内部表示。如不指定精度,内部用DOUBLE PRECISION表示 高精度浮点 DECIMAL 变长浮点数 16字节 -99999999999999999999999999.999999999999~99999999999999999999999999.999999999999 字符串 VARCHAR(n [bytes]) 变长字符串,有最大长度字符(或字节) 可变长度 暂不支持校验长度 时间 TIMESTAMP 日期与时间 8 字节 赋值格式: yyyy-mm-dd hh:mm:ss[.ffffff] 说明: 当超出范围时会报错,比如CAST(300 AS TINYINT),会提示超出范围。 时间格式必需足位,否则运行时会出错。即年必需4位,月、日、时、分、秒必需两位,秒后面可带6位以内小数表示毫秒。比如不能写成“2015-9-19 12:23:33”,而要写成“2015-09-19 12:23:33”。 父主题: 数据类型
  • 示例 CASE WHEN pi_flag = 'PRI' THEN UPDATE tbl_mmaxtuple SET i_num = pi_maxtuple WHERE i_moduletype = pi_moduletype AND i_moduleno = pi_moduleno AND i_tableid = pi_tableid; pi_returncode := 0; WHEN pi_flag = 'PUB' THEN UPDATE tbl_pmaxtuple SET i_num = pi_maxtuple WHERE (i_moduletype = pi_moduletype OR i_moduletype = pi_moduletype + 10000) AND i_tableid = pi_tableid; pi_returncode := 0; WHEN pi_flag = 'GLO' THEN UPDATE tbl_gmaxtuple SET i_num = pi_maxtuple WHERE i_tableid = pi_tableid; pi_returncode := 0; ELSE pi_returncode := 415055; END CASE; CASE pi_result WHEN 1 THEN pi_returncode := pi_pts_error_code; WHEN 2 THEN pi_returncode := pi_panw_error_code; WHEN 3 THEN pi_returncode := pi_preq_error_code; WHEN 6 THEN pi_returncode := pi_cmdunsp_error_code; WHEN 7 THEN pi_returncode := pi_dtunsp_error_code; WHEN 8 THEN pi_returncode := pi_comm_error_code; WHEN 9 THEN pi_returncode := pi_toolarge_error_code; WHEN 10 THEN pi_returncode := pi_smm_not_exist_error_code; ELSE pi_returncode := pi_rstivd_error_code; END CASE;
  • 异常处理语句 在一个语句块中,可以用EXCEPTION语句来来捕获异常信息,目前该语句并不区分哪种类型的异常,只能获取异常的描述内容,变量errmsg存储着异常消息描述,该变量为内置变量,不需要定义。 示例: DECLARE v_a INTEGER := 0; v_b FLOAT; v_ov VARCHAR(100); BEGIN v_b := 1 / v_a; EXCEPTION WHEN OTHERS THEN v_ov := errmsg; END; 父主题: 控制结构
  • 注释规范 注释是用来告诉读者程序编写的目的及其主要工作原理。目前支持两种注释方式:单行注释“--”,多行注释“/**/”。 建议: 源程序有效注释量必须在30%以上。 注释的内容要清楚、明了,含义准确,防止注释二义性。 禁止在注释中使用缩写。 除文件头的注释外,程序内部统一使用"--"进行注释。 统一文件头的注释,建议采用多行注释方式。 所有表字段定义,统一在后面添加注释,说明该字段的用途和含义。 注释与相应的代码具有同样的缩进。 注释与其上面的代码应用空行隔开。 复杂的SQL语句,必须有注释对其功能和逻辑进行说明,满足下述条件之一即为复杂SQL: 连接的表大于2个。 嵌套的层次大于3层。 同时含有GROUP BY和ORDER BY。 父主题: 变量&规则开发指导
共100000条