华为云用户手册

  • RANGE_N在字符串列的分区 输入 CREATE SET TABLE SC.TAB , NO FALLBACK, NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM=DEFAULT, DEFAULT MERGEBLOCKRATIO ( ACCOUNT_NUM VARCHAR(255) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL ,ACCOUNT_MODIFIER_NUM CHAR(18) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL ,DATA_SOURCE_ID CHAR(10) CHARACTER SET LATIN NOT CASESPECIFIC ,END_DT DATE FORMAT 'YYYY-MM-DD' ,UPD_TXF_BATCHTD INTEGER COMPRESS ) PRIMARY INDEX XPKT0300_AGREEMENT (ACCOUNT_NUM,ACCOUNT_MODIFIER_NUM) PARTITION BY ( RANGE_N(DATA_SOURCE_ID BETWEEN 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' AND 'ZZ', NO RANGE ,UNKNOWN) ,CASE_N(END_DT IS NULL , NO CASE , UNKNOWN)) ; 输出 CREATE TABLE SC.TAB ( ACCOUNT_NUM VARCHAR( 255 ) /* CHARACTER SET LATIN*/ /* NOT CASESPECIFIC*/ NOT NULL ,ACCOUNT_MODIFIER_NUM CHAR( 18 ) /* CHARACTER SET LATIN*/ /* NOT CASESPECIFIC*/ NOT NULL ,DATA_SOURCE_ID CHAR( 10 ) /* CHARACTER SET LATIN*/ /* NOT CASESPECIFIC*/ ,END_DT DATE ,UPD_TXF_BATCHTD INTEGER /* COMPRESS */ ) DISTRIBUTE BY HASH ( ACCOUNT_NUM ,ACCOUNT_MODIFIER_NUM )/* PARTITION BY ( RANGE_N ( DATA_SOURCE_ID BETWEEN 'A' ,'B' ,'C' ,'D' ,'E' ,'F' ,'G' ,'H' ,'I' ,'J' ,'K' ,'L' ,'M' ,'N' ,'O' ,'P' ,'Q' ,'R' ,'S' ,'T' ,'U' ,'V' ,'W' ,'X' ,'Y' ,'Z' AND 'ZZ' ,NO RANGE ,UNKNOWN ) ,*/ /* CASE_N(END_DT IS NULL , NO CASE , UNKNOWN)) */ ;
  • RANGE_N with comma seperated values 输入 CREATE TABLE orders10 (storeid INTEGER NOT NULL ,productid INTEGER NOT NULL ,orderdate DATE NOT NULL ,totalorders INTEGER NOT NULL) PRIMARY INDEX (storeid, productid) PARTITION BY ( RANGE_N(totalorders BETWEEN *, 100, 1000 AND *) ); 输出 CREATE TABLE orders10 (storeid INTEGER NOT NULL ,productid INTEGER NOT NULL ,orderdate DATE NOT NULL ,totalorders INTEGER NOT NULL) DISTRIBUTE BY HASH (storeid, productid) PARTITION BY RANGE (totalorders) ( PARTITION Orders10_0 END (100), PARTITION Orders10_1 END (1000), PARTITION Orders10_2 END (MAXVALUE) );
  • CLUSTERED KEY 在ADB中,CLUSTERED KEY:聚集索引,定义表中的排序列,聚集索引中键值的逻辑顺序决定了表中相应行的物理顺序。 GaussDB (DWS)不支持该属性修改表定义信息,DSC迁移时会将该关键字删除。 输入示例 1 2 3 4 5 6 DROP TABLE IF EXISTS unsupport_parse_test; CREATE TABLE `unsupport_parse_test` ( `username` int, clustered key clustered_key(shopid ASC, datetype ASC) ); DROP TABLE IF EXISTS unsupport_parse_test; 输出示例 1 2 3 4 5 DROP TABLE IF EXISTS "public"."unsupport_parse_test"; CREATE TABLE "public"."unsupport_parse_test" ( "username" INTEGER ) WITH (ORIENTATION = ROW, COMPRESSION = NO) NOCOMPRESS DISTRIBUTE BY HASH ("username"); DROP TABLE IF EXISTS "public"."unsupport_parse_test"; 父主题: 表(可选参数、操作)
  • java.sql.PreparedStatement java.sql.PreparedStatement是预处理语句接口。 表1 对java.sql.PreparedStatement的支持情况 方法名 返回值类型 支持JDBC 4 clearParameters() void Yes execute() boolean Yes executeQuery() ResultSet Yes excuteUpdate() int Yes getMetaData() ResultSetMetaData Yes setBoolean(int parameterIndex, boolean x) void Yes setBigDecimal(int parameterIndex, BigDecimal x) void Yes setByte(int parameterIndex, byte x) void Yes setBytes(int parameterIndex, byte[] x) void Yes setDate(int parameterIndex, Date x) void Yes setDouble(int parameterIndex, double x) void Yes setFloat(int parameterIndex, float x) void Yes setInt(int parameterIndex, int x) void Yes setLong(int parameterIndex, long x) void Yes setNString(int parameterIndex, String value) void Yes setShort(int parameterIndex, short x) void Yes setString(int parameterIndex, String x) void Yes addBatch() void Yes executeBatch() int[] Yes clearBatch() void Yes addBatch()、execute()必须在clearBatch()之后才能执行。 调用executeBatch()方法并不会清除batch。用户必须显式使用clearBatch()清除 。 在添加了一个batch的绑定变量后,用户若想重用这些值(再次添加一个batch),无需再次使用set*()方法 。 以下方法是从java.sql.Statement继承而来:close,execute,executeQuery,executeUpdate,getConnection,getResultSet,getUpdateCount,isClosed,setMaxRows, setFetchSize。 父主题: JDBC接口参考
  • AUTONOMOUS 输入:AUTONOMOUS 1 2 3 CREATE OR REPLACE EDITIONABLE PACKAGE BODY "Pack1"."DEMO_PROC" is PROCEDURE log(proc_name IN VARCHAR2, info IN VARCHAR2) IS PRAGMA AUTONOMOUS_TRANSACTION; 输出 1 2 CREATE OR REPLACE PROCEDURE DEMO_PROC.log ( proc_name IN VARCHAR2 ,info IN VARCHAR2 ) IS /*PRAGMA AUTONOMOUS_TRANSACTION;*/
  • ALTER SESSION Oracle中的ALTER SESSION语句用于设置或修改数据库连接的参数和行为。该语句将持续有效,除非数据库连接断开。DSC可迁移如下形式的ALTER SESSION语句: 含有ADVISE、ENABLE、DISABLE、CLOSE和FORCE的ALTER SESSION语句将被迁移为注释脚本。 含有SET CLAUSE参数(例如:NLS_DATE_FORMAT和NLS_DATE_LANGUAGE等)的ALTER SESSION语句将被逐字复制。 该工具不支持迁移命令子句含有变量的ALTER SESSION语句。 例如:EXECUTE IMMEDIATE ' alter session ' || command_val || 'parallel ' || type_value. 示例中,command_val是变量,不受DSC支持。不支持的语句将被逐字复制到已迁移的脚本中。 输入:ALTER SESSION 1 2 3 4 5 ALTER SESSION ENABLE PARALLEL DDL; ALTER SESSION ADVISE COMMIT; ALTER SESSION CLOSE DATABASE LINK local; ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY MM DD HH24:MI:SS'; ALTER SESSION SET current_schema = 'isfc'; 输出 1 2 3 4 5 /*ALTER SESSION ENABLE PARALLEL DDL;*/ /*ALTER SESSION ADVISE COMMIT;*/ /*ALTER SESSION CLOSE DATABASE LINK local;*/ ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY MM DD HH24:MI:SS'; ALTER SESSION SET current_schema = 'isfc'; 输入:ALTER SESSION 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE OR REPLACE PROCEDURE PUBLIC .TEST_CALL is command_val varchar2 ( 1000 ) ; type_value number ; BEGIN command_val := 'enable parallel ddl' ; dbms_output.put_line ( mike ) ; -- execute immediate 'ALTER SESSION DISABLE GUARD' ; execute immediate 'ALTER SESSION ADVISE ROLLBACK' ; EXECUTE IMMEDIATE ' alter session ' || command_val || 'parallel ' || type_value ; END TEST_CALL; / 输出 1 2 3 4 5 6 7 8 9 10 11 12 CREATE OR REPLACE PROCEDURE PUBLIC.TEST_CALL is command_val varchar2 ( 1000 ) ; type_value number ; BEGIN command_val := 'enable parallel ddl' ; dbms_output.put_line ( mike ) ; /* execute immediate 'ALTER SESSION DISABLE GUARD' ; */ execute immediate '/*ALTER SESSION ADVISE ROLLBACK*/' ; EXECUTE IMMEDIATE 'alter session ' || command_val || 'parallel ' || type_value ; END ; /
  • LONG 数据类型LONG迁移为TEXT。 输入:LONG 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE OR REPLACE FUNCTION fn_proj_det ( i_proj_cd INT ) RETURN LONG IS v_proj_det LONG; BEGIN SELECT proj_det INTO v_proj_det FROM project WHERE proj_cd = i_proj_cd; RETURN v_proj_det; END; / 输出 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE OR REPLACE FUNCTION fn_proj_det ( i_proj_cd INT ) RETURN TEXT IS v_proj_det TEXT; BEGIN SELECT proj_det INTO v_proj_det FROM project WHERE proj_cd = i_proj_cd; RETURN v_proj_det; END; /
  • TRUNCATE TABLE Oracle中的TRUNCATE TABLE语句用于从表中删除所有记录,与DELETE语句功能相同,但不含WHERE子句。执行截断操作后,表将成为空表。DSC仅可迁移含有静态表名称的TRUNCATE TABLE语句,不支持迁移含有动态表名称的TRUNCATE TABLE语句。 该工具不支持迁移含有动态表名称的TRUNCATE TABLE语句。 例如:l_table :='truncate table ' || itable_name 在此示例中,itable_name表示动态表名称,不受DSC支持。不支持的语句将被原样复制到已迁移的脚本中。 输入:TRUNCATE TABLE,使用Execute Immediate 1 2 3 4 5 6 CREATE OR REPLACE PROCEDURE schema1.proc1 AS BEGIN EXECUTE IMMEDIATE 'TRUNCATE TABLE QUERY_TABLE'; End proc1; / 输出 1 2 3 4 5 CREATE OR REPLACE PROCEDURE schema1.proc1 AS BEGIN EXECUTE IMMEDIATE 'TRUNCATE TABLE schema1.QUERY_TABLE' ; end ; / 输入:在过程中使用TRUNCATE TABLE DSC不会为动态PL/SQL语句添加模式名称。 1 2 3 4 5 6 7 8 CREATE OR REPLACE PROCEDURE schemName.sp_dd_table ( itable_name VARCHAR2 ) IS l_table VARCHAR2 ( 255 ) ; BEGIN l_table :='truncate table ' || itable_name ; ---- dbms_utility.exec_ddl_statement(l_table); dbms_output.put_line ( itable_name || ' ' || 'Truncated' ) ; END sp_dd_table ; / 输出 1 2 3 4 5 6 7 8 9 CREATE OR REPLACE PROCEDURE schemName.sp_dd_table ( itable_name VARCHAR2 ) IS l_table VARCHAR2 ( 255 ) ; BEGIN l_table :='truncate table ' || itable_name ; /* dbms_utility.exec_ddl_statement(l_table); */ dbms_output.put_line ( itable_name || ' ' || 'Truncated' ) ; end ; /
  • END 不支持END指定标签。因此,迁移期间将删除标签名称。 输入:END,使用过程名 1 2 3 4 5 CREATE OR REPLACE PROCEDURE sp_ins_emp … … ... END sp_ins_emp; 输出 1 2 3 4 5 CREATE OR REPLACE PROCEDURE sp_ins_emp … … ... END; 输入:END,使用函数名 1 2 3 4 5 6 CREATE FUNCTION fn_get_bal … … ... END get_bal; / 输出 1 2 3 4 5 6 CREATE FUNCTION fn_get_bal … … ... END; /
  • 替换变量 替换变量是Oracle SQL * Plus工具的一个特性。 当在一个语句中使用一个替换变量时,SQL * Plus会请求一个输入值并重写该语句以将其包含在内。 重写的语句被传递到Oracle数据库。 当输入的Oracle脚本包含任何替换变量时,DSC将显示以下消息。消息记录在控制台和日志文件中。 ************************************************************************** USER ATTENTION!!! Variable: &bbid should be substituted in the file : "/home/testmigration/V100R002C60/MigrationTool/Input/proc_frss_jczbsc.SQL" Variable: &wdbs should be substituted in the file : "/home/testmigration/V100R002C60/MigrationTool/Input/proc_frss_jczbsc.SQL" Variable: &batch_no should be substituted in the file : "/home/testmigration/V100R002C60/MigrationTool/Input/proc_frss_jczbsc.SQL" **************************************************************************
  • EDITIONABLE GaussDB(DWS)不支持EDITIONABLE关键字,因此需要在目标数据库中删除。 输入:EDITIONABLE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE OR REPLACE EDITIONABLE PACKAGE "PACK1"."PACKAGE_SEND_MESSAGE" AS TYPE filelist IS REF CURSOR; PROCEDURE get_message_info (in_userid IN VARCHAR2, in_branchid IN VARCHAR2, in_appverid IN VARCHAR2, in_app_list_flag IN VARCHAR2, in_filetype IN VARCHAR2, in_filestate IN VARCHAR2, o_retcode OUT VARCHAR2, o_errormsg OUT VARCHAR2, o_seq OUT VARCHAR2, o_totalnum OUT NUMBER, o_filelist OUT filelist); 输出 1 2 3 4 /*~~PACKAGE_SEND_MESSAGE~~*/ CREATE SCHEMA PACKAGE_SEND_MESSAGE ;
  • Data Studio用户界面 表1 用户界面简介 界面名称 描述 主菜单 提供使用Data Studio的基本操作。 工具栏 提供常用操作入口。 “SQL终端”页签 用于执行SQL语句和函数/过程。 “PL/SQL Viewer”页签 显示函数/过程信息。 “调用堆栈”窗格 显示执行栈。 “断点”窗格 显示所有设置过的断点。 “变量”窗格 显示变量及其变量值。 “SQL Assistant”页签 显示“SQL终端”和“PL/SQL Viewer”页签中输入信息的建议或参考。 “结果”页签 显示所执行的函数/过程或SQL语句的结果。 “消息”页签 显示进程输出。显示标准输入、标准输出和标准错误。 “对象浏览器”窗格 显示数据库连接的层级树形结构和用户有权访问的相关数据库对象。除公共模式外,所有默认创建的模式均分组在“系统模式”下,用户模式分组在相应数据库的“用户模式”下。 说明: “对象浏览器”仅显示满足当前用户权限要求的对象。 “最小化窗口”窗格 用于打开“调用堆栈”、“断点”和“变量”窗格。该窗格仅在“调用堆栈”、“断点”、“变量”窗格中的一个或多个窗格最小化时显示。 搜索工具栏 用于在“对象浏览器”窗格中搜索对象。
  • CONNECTION GaussDB(DWS)不支持该属性修改表定义信息,DSC迁移时会将该属性删除。 CONNECTION关键字在MySQL中用作引用外部数据源。工具暂不支持该特性的完整迁移。基于当前的临时方案,工具仅仅移除该关键字。 输入示例 1 2 3 4 5 6 7 8 9 10 CREATE TABLE `public`.`runoob_alter_test`( `dataType1` int NOT NULL AUTO_INCREMENT, `dataType2` DOUBLE(20,8), `dataType3` TEXT NOT NULL, `dataType4` YEAR NOT NULL DEFAULT '2018', PRIMARY KEY(`dataType1`) ); ALTER TABLE runoob_alter_test CONNECTION 'hello'; ALTER TABLE runoob_alter_test CONNECTION='hello'; 输出示例 1 2 3 4 5 6 7 8 9 10 11 CREATE TABLE "public"."runoob_alter_test" ( "datatype1" SERIAL NOT NULL, "datatype2" DOUBLE PRECISION, "datatype3" TEXT NOT NULL, "datatype4" SMALLINT NOT NULL DEFAULT '2018', PRIMARY KEY ("datatype1") ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype1"); 父主题: 表(可选参数、操作)
  • USER_TAB_PARTITIONS USER_TAB_PARTITIONS视图存储当前用户下所有分区的信息。当前用户下每个分区表的每个分区在USER_TAB_PARTITIONS中都会有一条记录。 名称 类型 描述 table_owner character varying(64) 分区所在表的所有者。 schema character varying(64) 分区表模式。 table_name character varying(64) 表名。 partition_name character varying(64) 分区的名称。 high_value text 范围分区的上边界,或列表分区的边界值集合。 前向兼容的保留字段,8.1.3集群版本新增pretty_high_value用于记录此信息。 pretty_high_value text 范围分区的上边界,或列表分区的边界值集合。 查询结果为表分区对应边界表达式的即时反编译输出。该字段的输出比high_value的信息更详细,根据实际使用场景可输出collaton、字段数据类型等信息。 tablespace_name name 分区所在表空间的名称。 父主题: 系统视图
  • 执行普通SQL语句 应用程序通过执行SQL语句来操作数据库的数据(不用传递参数的语句),需要按以下步骤执行: 调用Connection的createStatement方法创建语句对象。 1 Statement stmt = con.createStatement(); 调用Statement的executeUpdate方法执行SQL语句。 1 int rc = stmt.executeUpdate("CREATE TABLE customer_t1(c_customer_sk INTEGER, c_customer_name VARCHAR(32));"); 数据库中收到的一次执行请求(不在事务块中),如果含有多条语句,将会被打包成一个事务,事务块中不支持vacuum操作。如果其中有一个语句失败,那么整个请求都将会被回滚。 关闭语句对象。 1 stmt.close();
  • 执行预编译SQL语句 预编译语句是只编译和优化一次,然后可以通过设置不同的参数值多次使用。由于已经预先编译好,后续使用会减少执行时间。因此,如果多次执行一条语句,请选择使用预编译语句。可以按以下步骤执行: 调用Connection的prepareStatement方法创建预编译语句对象。 1 PreparedStatement pstmt = con.prepareStatement("UPDATE customer_t1 SET c_customer_name = ? WHERE c_customer_sk = 1"); 调用PreparedStatement的setShort设置参数。 1 pstmt.setShort(1, (short)2); 调用PreparedStatement的executeUpdate方法执行预编译SQL语句。 1 int rowcount = pstmt.executeUpdate(); 调用PreparedStatement的close方法关闭预编译语句对象。 1 pstmt.close();
  • 执行批处理 用一条预处理语句处理多条相似的数据,数据库只创建一次执行计划,节省了语句的编译和优化时间。可以按如下步骤执行: 调用Connection的prepareStatement方法创建预编译语句对象。 1 PreparedStatement pstmt = con.prepareStatement("INSERT INTO customer_t1 VALUES (?)"); 针对每条数据都要调用setShort设置参数,以及调用addBatch确认该条设置完毕。 1 2 pstmt.setShort(1, (short)2); pstmt.addBatch(); 调用PreparedStatement的executeBatch方法执行批处理。 1 int[] rowcount = pstmt.executeBatch(); 调用PreparedStatement的close方法关闭预编译语句对象。 1 pstmt.close(); 在实际的批处理过程中,通常不终止批处理程序的执行,否则会降低数据库的性能。因此在批处理程序时,应该关闭自动提交功能,每几行提交一次。关闭自动提交功能的语句为:conn.setAutoCommit(false);
  • 调用存储过程 GaussDB(DWS)支持通过JDBC直接调用事先创建的存储过程,步骤如下: 调用Connection的prepareCall方法创建调用语句对象。 1 CallableStatement cstmt = myConn.prepareCall("{? = CALL TESTPROC(?,?,?)}"); 调用CallableStatement的setInt方法设置参数。 1 2 3 cstmt.setInt(2, 50); cstmt.setInt(1, 20); cstmt.setInt(3, 90); 调用CallableStatement的registerOutParameter方法注册输出参数。 1 cstmt.registerOutParameter(4, Types.INTEGER); //注册out类型的参数,类型为整型。 调用CallableStatement的execute执行方法调用。 1 cstmt.execute(); 调用CallableStatement的getInt方法获取输出参数。 1 int out = cstmt.getInt(4); //获取out参数 示例: 1 2 3 4 5 6 7 8 9 10 11 12 //在数据库中已创建了如下存储过程,它带有out参数。 create or replace procedure testproc ( psv_in1 in integer, psv_in2 in integer, psv_inout in out integer ) as begin psv_inout := psv_in1 + psv_in2 + psv_inout; end; / 调用CallableStatement的close方法关闭调用语句。 1 cstmt.close(); 很多的数据库例如Connection、Statement和ResultSet都有close()方法,在使用完对象后应把它们关闭。要注意的是,Connection的关闭将间接关闭所有与它关联的Statement,Statement的关闭间接关闭了ResultSet。 一些JDBC驱动程序还提供命名参数的方法来设置参数。命名参数的方法允许根据名称而不是顺序来设置参数,若参数有默认值,则可以不用指定参数值就可以使用此参数的默认值。即使存储过程中参数的顺序发生了变更,也不必修改应用程序。目前GaussDB(DWS)数据库的JDBC驱动程序不支持此方法。 GaussDB(DWS)数据库不支持带有输出参数的函数,也不支持存储过程和函数参数默认值。 当游标作为存储过程的返回值时,如果使用JDBC调用该存储过程,返回的游标将不可用。 存储过程不能和普通SQL在同一条语句中执行。
  • 类型对照 表1 集合类型对照表 MySQL集合类型 MySQL INPUT GaussDB(DWS) OUTPUT ENUM ENUM VARCHAR SET SET VARCHAR 对于ENUM的类型转换,将转换为VARCHAR类型,精度大小为枚举值中最长字段长度的4倍,并使用CHECK()函数确保输入枚举值的正确性 对于SET的类型转换,将转换为VARCHAR类型,精度大小为各枚举值字段长度与分隔符数量和的4倍。 输入示例ENUM 1 2 3 4 CREATE TABLE IF NOT EXISTS `runoob_dataType_test`( id int(2) PRIMARY KEY, `dataType_17` ENUM('dws-1', 'dws-2', 'dws-3') ); 输出示例 1 2 3 4 5 6 7 8 CREATE TABLE IF NOT EXISTS "public"."runoob_datatype_test" ( "id" INTEGER(2) PRIMARY KEY, "datatype_17" VARCHAR(20) CHECK (dataType_17 IN('dws-1','dws-2','dws-3','', null)) ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("id"); 输入示例SET 1 2 3 CREATE TABLE IF NOT EXISTS `runoob_tbl_test`( `dataType_18` SET('dws-1', 'dws-2', 'dws-3') ); 输出示例 1 2 3 4 5 6 7 CREATE TABLE IF NOT EXISTS "public"."runoob_tbl_test" ( "datatype_18" VARCHAR(68) ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype_18");
  • LOCK GaussDB(DWS)不支持MySQL中的"ALTER TABLE tbName LOCK"语句,DSC工具迁移时会将其删除。 输入示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 CREATE TABLE IF NOT EXISTS `runoob_alter_test`( `dataType1` int NOT NULL AUTO_INCREMENT, `dataType2` FLOAT(10), `dataType4` TEXT NOT NULL, `dataType5` YEAR NOT NULL DEFAULT '2018', `dataType6` DATETIME NOT NULL, `dataType7` CHAR NOT NULL DEFAULT '', `dataType8` VARCHAR(50), `dataType9` VARCHAR(50) NOT NULL DEFAULT '', `dataType10` TIME NOT NULL DEFAULT '10:20:59', PRIMARY KEY(`dataType1`) )ENGINE=InnoDB DEFAULT CHARSET=utf8; ## A. ALTER TABLE runoob_alter_test LOCK DEFAULT; ## B. ALTER TABLE runoob_alter_test LOCK=DEFAULT; ## C. ALTER TABLE runoob_alter_test LOCK EXCLUSIVE; ## D. ALTER TABLE runoob_alter_test LOCK=EXCLUSIVE; 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 CREATE TABLE IF NOT EXISTS "public"."runoob_alter_test" ( "datatype1" SERIAL NOT NULL, "datatype2" REAL, "datatype4" TEXT NOT NULL, "datatype5" SMALLINT NOT NULL DEFAULT '2018', "datatype6" TIMESTAMP WITHOUT TIME ZONE NOT NULL, "datatype7" CHAR(4) NOT NULL DEFAULT '', "datatype8" VARCHAR(200), "datatype9" VARCHAR(200) NOT NULL DEFAULT '', "datatype10" TIME WITHOUT TIME ZONE NOT NULL DEFAULT '10:20:59', PRIMARY KEY ("datatype1") ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype1"); -- A. -- B. -- C. -- D. 父主题: 表(可选参数、操作)
  • 语法 语法请参见图1。 图1 noselect::= using_clause子句的语法参见图2。 图2 using_clause-2 对以上语法格式的解释如下: USING IN bind_argument用于指定存放传递给动态SQL值的变量,在dynamic_noselect_string中存在占位符时使用,即动态SQL语句执行时,bind_argument将替换相对应的占位符。要注意的是,bind_argument只能是值、变量或表达式,不能是表名、列名、数据类型等数据库对象。如果存储过程需要通过声明参数传递数据库对象来构造动态SQL语句(常见于执行DDL语句时),建议采用连接运算符“||”拼接dynamic_select_clause。另外,动态语句允许出现重复的占位符,相同占位符只能与唯一一个bind_argument按位置一一对应。
  • 示例 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 32 33 34 --创建表 CREATE TABLE sections_t1 ( section NUMBER(4) , section_name VARCHAR2(30), manager_id NUMBER(6), place_id NUMBER(4) ) DISTRIBUTE BY hash(manager_id); --声明变量 DECLARE section NUMBER(4) := 280; section_name VARCHAR2(30) := 'Info support'; manager_id NUMBER(6) := 103; place_id NUMBER(4) := 1400; new_colname VARCHAR2(10) := 'sec_name'; BEGIN --执行查询 EXECUTE IMMEDIATE 'insert into sections_t1 values(:1, :2, :3, :4)' USING section, section_name, manager_id,place_id; --执行查询(重复占位符) EXECUTE IMMEDIATE 'insert into sections_t1 values(:1, :2, :3, :1)' USING section, section_name, manager_id; --执行ALTER语句(建议采用“||”拼接数据库对象构造DDL语句) EXECUTE IMMEDIATE 'alter table sections_t1 rename section_name to ' || new_colname; END; / --查询数据 SELECT * FROM sections_t1; --删除表 DROP TABLE sections_t1;
  • 声明Hexadecimal Binary Literal值 输入: CREATE MULTISET TABLE bvalues (IDVal INTEGER, CodeVal BYTE(2)); INSERT INTO bvalues VALUES (112193, '7879'XB) ; SELECT IDVal, CodeVal FROM bvalues WHERE CodeVal = '7879'XB ; 输出
  • 声明Hexadecimal Character Literal值 输入: SELECT (COALESCE(TRIM(BOTH FROM VTX_D_RPT_0017_WMSE12_01_01.ID),'')) ||'7E'xc||(COALESCE(TRIM(BOTH FROM VTX_D_RPT_0017_WMSE12_01_01.Code),'')) ||'7E'xc||(COALESCE(TRIM(BOTH FROM VTX_D_RPT_0017_WMSE12_01_01.Description),'')) ||'7E'xc||(COALESCE(TRIM(BOTH FROM VTX_D_RPT_0017_WMSE12_01_01.Name),'')) ||'7E'xc||(COALESCE(TRIM(BOTH FROM VTX_D_RPT_0017_WMSE12_01_01.Host_Product_Id),'')) FROM DP_VTXEDW.VTX_D_RPT_0017_WMSE12_01_01 VTX_D_RPT_0017_WMSE12_01_01 WHERE 1=1 ; 输出
  • SUBTYPE SUBTYPE语句中,PL/SQL允许您定义自己的子类型或预定义数据类型的别名,有时称为抽象数据类型。 输入 CREATE OR REPLACE PACKAGE "SAD"."BAS_SUBTYPE_PKG" IS SUBTYPE CURRENCY IS BAS_PRICE_LIST_T.CURRENCY%TYPE; END bas_subtype_pkg; / CREATE OR REPLACE PACKAGE BODY "SAD"."BAS_SUBTYPE_PKG" IS BEGIN NULL; END bas_subtype_pkg; / --******************************************************************** CREATE OR REPLACE PACKAGE BODY SAD.bas_lookup_misc_pkg IS FUNCTION get_currency(pi_price_type IN NUMBER) RETURN VARCHAR2 IS v_currency bas_subtype_pkg.currency; BEGIN g_func_name := 'get_currency'; FOR rec_currency IN (SELECT currency FROM sad_price_type_v WHERE price_type_code = pi_price_type) LOOP v_currency := rec_currency.currency; END LOOP; RETURN v_currency; END get_currency; END SAD.bas_lookup_misc_pkg; /
  • TYPE命名约定 用户定义的类型允许定义数据类型,以模拟应用程序中数据的结构和行为。 输入 CREATE TYPE t_line AS ( product_line VARCHAR2 ( 30 ) ,product_amount NUMBER ) ; ; 输出 CREATE TYPE sad_dml_product_pkg.t_line AS ( product_line VARCHAR2 ( 30 ) ,product_amount NUMBER ) ; 输入 CREATE TYPE t_line AS ( product_line VARCHAR2 ( 30 ) ,product_amount NUMBER ) ;
  • EXTEND GaussDB(DWS)支持EXTEND关键字。 输入: EXTEND FUNCTION FUNC_EXTEND ( in_str IN VARCHAR2) RETURN ARRYTYPE AS v_count2 INTEGER; v_strlist arrytype; v_node VARCHAR2 (2000); BEGIN v_count2 := 0; v_strlist := arrytype (); FOR v_i IN 1 .. LENGTH (in_str) LOOP IF v_node IS NULL THEN v_node := ''; END IF; IF (v_count2 = 0) OR (v_count2 IS NULL) THEN EXIT; ELSE v_strlist.EXTEND (); v_strlist (v_i) := v_node; v_node := ''; END IF; END LOOP; RETURN v_strlist; END; / 输出 FUNCTION FUNC_EXTEND ( in_str IN VARCHAR2 ) RETURN ARRYTYPE AS v_count2 INTEGER ; v_strlist arrytype ; v_node VARCHAR2 ( 2000 ) ; BEGIN v_count2 := 0 ; v_strlist := arrytype ( ) ; FOR v_i IN 1.. LENGTH( in_str ) LOOP IF v_node IS NULL THEN v_node := '' ; END IF ; IF ( v_count2 = 0 ) OR( v_count2 IS NULL ) THEN EXIT ; ELSE v_strlist.EXTEND ( 1 ) ; v_strlist ( v_i ) := v_node ; v_node := '' ; END IF ; END LOOP ; RETURN v_strlist ; END ; /
  • PG_AMOP PG_AMOP系统表存储和访问方法操作符族关联的信息。如果一个操作符是一个操作符族中的成员,则在这个表中会占据一行。一个族成员是一个search操作符或一个ordering操作符。一个操作符可以在多个族中出现,但是不能在一个族中的多个搜索位置或多个排序位置中出现。 表1 PG_AMOP字段 名字 类型 引用 描述 oid oid - 行标识符(隐藏属性,必须明确选择才会显示)。 amopfamily oid PG_OPFAMILY.oid 该项的操作符族。 amoplefttype oid PG_TYPE.oid 操作符的左输入类型。 amoprighttype oid PG_TYPE.oid 操作符的右输入类型。 amopstrategy smallint - 操作符策略数。 amoppurpose "char" - 操作符目的,s为搜索或o为排序。 amopopr oid PG_OPERATOR.oid 该操作符的OID。 amopmethod oid PG_AM.oid 使用此操作符族的索引访问方法。 amopsortfamily oid PG_OPFAMILY.oid 如果是一个排序操作符,则该项会按照btree操作符族排序;如果是一个搜索操作符,则为0。 search操作符表明这个操作符族的一个索引可以被搜索,找到所有满足WHERE indexed_column operator constant的行。显然,这样的操作符必须返回布尔值,并且它的左输入类型必须匹配索引的字段数据类型。 ordering操作符表明这个操作符族的一个索引可以被扫描,返回以ORDER BY indexed_column operator constant顺序表示的行。这样的操作符可以返回任意可排序的数据类型,它的左输入类型也必须匹配索引的字段数据类型。ORDER BY的确切语义是由amopsortfamily字段指定的,该字段必须为操作符的返回类型引用一个btree操作符族。 父主题: 系统表
  • LOW_PRIORITY MySQL INSERT插入语句使用LOW_PRIORITY修饰符时,则执行该INSERT延迟。 输入示例 1 2 3 4 5 6 # LOW_PRIORITY 低优先级 INSERT LOW_PRIORITY INTO exmp_tb2 VALUES( DEFAULT, '128.23', 'nice', '2018-10-11'); INSERT LOW_PRIORITY INTO exmp_tb2 VALUES(DEFAULT, DEFAULT, 'nice', '2018-12-14' ); INSERT LOW_PRIORITY INTO exmp_tb2 VALUES(DEFAULT, DEFAULT, 'nice', DEFAULT); INSERT LOW_PRIORITY INTO exmp_tb2 (tb2_id, tb2_price) VALUES(DEFAULT, DEFAULT); INSERT LOW_PRIORITY INTO exmp_tb2 (tb2_id, tb2_price, tb2_note) VALUES(DEFAULT, DEFAULT, DEFAULT); 输出示例 1 2 3 4 5 6 -- LOW_PRIORITY 低优先级 INSERT INTO "public"."exmp_tb2" VALUES (DEFAULT,'128.23','nice','2018-10-11'); INSERT INTO "public"."exmp_tb2" VALUES (DEFAULT,DEFAULT,'nice','2018-12-14'); INSERT INTO "public"."exmp_tb2" VALUES (DEFAULT,DEFAULT,'nice',DEFAULT); INSERT INTO "public"."exmp_tb2" ("tb2_id","tb2_price") VALUES (DEFAULT,DEFAULT); INSERT INTO "public"."exmp_tb2" ("tb2_id","tb2_price","tb2_note") VALUES (DEFAULT,DEFAULT,DEFAULT); 父主题: INSERT
  • 编辑连接 在“对象浏览器”窗格中,右键单击连接名称,然后选择“编辑连接”。弹出“编辑连接”对话框。 若要编辑活跃连接,需要先关闭该连接,然后重新打开设置了新属性的连接。工具会显示连接重置警告。 编辑连接参数。有关参数详情,请参见表1。 数据库类型和名称字段不支持修改。 单击“确定”保存更新后的连接信息。 可单击“清除”清除“编辑连接”对话框中的所有字段。 如果未修改任何连接参数就单击“确定”,会显示对话框,提示用户未保存更改。在修改连接参数后,会显示对话框消息。 如果未启用SSL,工具会显示“连接安全告警”对话框。单击“继续”以继续使用不安全的连接,或单击“取消”返回到“编辑连接”对话框并启用SSL。 如果勾选“不再显示”字段,当前登录的Data Studio实例在后续连接时,不再显示“连接安全告警”对话框。 工具会显示“确认删除连接”对话框,询问用户是否确认删除已编辑连接的数据库。 单击“是”继续更新连接信息,并重新连接到已更新参数的连接。 状态栏显示已完成操作的状态。
共100000条