返回值: l NULL 没有SELECT或DML运行 l TRUE 如果SELECT或DML返回或影响了一行或多行 l FALSE 其他情况 DROP TABLE dept_temp; CREATE TABLE dept_temp AS SELECT * FROM departments;
CREATE OR REPLACE PROCEDURE P (dept_no NUMBER) AS BEGIN DELETE FROM dept_temp WHERE department_id = dept_no; IF SQL%FOUND THEN DBMS_OUTPUT.PUT_LINE ('Delete succeeded for department number ' || dept_no); ELSE DBMS_OUTPUT.PUT_LINE ('No department number ' || dept_no);
GBase 8s PL/SQL手册 南大通用数据技术股份有限公司 - 96 -
END IF; END;
BEGIN p(270); p(400); END;
--Result: --Delete succeeded for department number 270 --No department number 400
AI4DB:趋势预测
功能说明 UNION 用来将多个SELECT 语句的结果合并到一个结果集中。 在每个SELECT 语句对应位置上的选择列,应该有相同的类型。(例如,第一个 语句选出的第一列应该与其它语句选出的第一列的类型相同)。第一个SELECT 语句中用到的列名称被作为返回结果的列名称。 SELECT 语句是一般的查询语句,但是有以下约束: 不同的数据类型, 不能使用UNION 和UNION ALL, 例如: 数值型、 字符型、 日期和时间型之间不能使用UNION 和UNION ALL,但是DATETIME 和 TIMESTAMP 类型可以使用UNION 和UNION ALL, 其它的日期和时间类型 则不行。 如果UNION 和UNION ALL 两边的数据类型为CHAR 类型,进行UNION 和UNION ALL 操作时,结果返回VARCHAR 类型。 例如:SELECT CHAR(10) UNION SELECT CHAR(255) 的结果集为 VARCHAR(255)。 UNION 和UNION ALL 结果由小的数据类型向大的数据类型转换, 如: INT -> BIGINT -> DECIMAL -> DOUBLE。
GBase 8a MPP Cluster 产品手册 5 数据库管理指南 文档版本953(2022-09-15) 南大通用数据技术股份有限公司 1086 例如:SELECT INT UNION SELECT DOUBLE 的结果集为DOUBLE 型。 NULL 可以和任何类型做UNION 和UNION ALL。 例如:SELECT NULL UNION SELECT 1; 如果只是使用UNION,那么将返回无重复记录的结果集,此时,UNION 等 同于UNION DISTINCT。如果使用UNION ALL,将会返回所有SELECT 后 的结果集,这个结果集会存在重复的记录。 如果在多个SELECT 的UNION 查询中,同时存在UNION [DISTINCT]和 UNION ALL,那么UNION ALL 会被忽略,最终返回UNION [DISTINCT]后 的结果集(过滤掉重复的记录行)。 如果希望使用ORDER BY 或LIMIT 子句来分类或限制整个UNION 结果, 可以给单独的SELECT 语句加上括号或者把ORDER BY 或LIMIT 置于最后。 语法格式 select_statement1 UNION [ALL | DISTINCT] select_statement2 [UNION [ALL | DISTINCT] select_statement3 …… UNION [ALL | DISTINCT] select_statementN ] 表5- 104 参数说明 参数名称 说 明 select_statement SELECT 语句。 示例 示例1: SELECT 语句中使用ORDER BY 子句分类UNION 结果。 这种ORDER BY 不能使用包括表名的列引用(如,table_name.col_name 格式的名字)。相对的, 可以在第一个SELECT 语句中提供一个列的别名并在ORDER BY 中引用这个别 名。 gbase> CREATE TABLE student (stu_no int, stu_name varchar(200),stu_sex int); Query OK, 0 rows affected gbase> INSERT INTO student VALUES(4,'King',1),(5,'Smith',1); Query OK, 2 rows affected
GBase 8a MPP Cluster 产品手册 5 数据库管理指南 文档版本953(2022-09-15) 南大通用数据技术股份有限公司 1087 Records: 2 Duplicates: 0 Warnings: 0 gbase> SELECT stu_name FROM student WHERE stu_name LIKE 'S%' UNION SELECT stu_name FROM student WHERE stu_name LIKE '%K%' ORDER BY stu_name LIMIT 10; +----------+ | stu_name | +----------+ | King | | Smith | +----------+ 2 rows in set 示例2:对于单独的SELECT 应用ORDER BY 或LIMIT 时,将子句插入到封装 SELECT 的圆括号中。圆括号中的SELECT 语句的ORDER BY 只有与LIMIT 结 合才起作用。否则,ORDER BY 将被优化掉,防止语法二义性。 gbase> (SELECT c_name FROM ssbm.customer WHERE c_name LIKE '%00002%' ORDER BY c_name LIMIT 10) UNION (SELECT c_name FROM ssbm.customer WHERE c_name LIKE '%00003%'ORDER BY c_name LIMIT 10); +--------------------+ | c_name | +--------------------+ | Customer#000000002 | | Customer#000000020 | | Customer#000000021 | | Customer#000000022 | | Customer#000000023 | | Customer#000000024 | | Customer#000000025 | | Customer#000000026 | | Customer#000000027 | | Customer#000000028 | | Customer#000000003 | | Customer#000000030 | | Customer#000000031 | | Customer#000000032 | | Customer#000000033 | | Customer#000000034 | | Customer#000000035 | | Customer#000000036 | | Customer#000000037 |
GBase 8a MPP Cluster 产品手册 5 数据库管理指南 文档版本953(2022-09-15) 南大通用数据技术股份有限公司 1088 | Customer#000000038 | +--------------------+ 20 rows in set 示例3: UNION 结果集中列的长度和类型需要考虑到从所有SELECT 语句中查出 的值。第一个SELECT 查出的值比第二个SELECT 的值短。 gbase> SELECT REPEAT('a',1) UNION SELECT REPEAT('b',10); +---------------+ | REPEAT('a',1) | +---------------+ | a | | bbbbbbbbbb | +---------------+ 2 rows in set 示例4: 系统报告错误信息, 是因为LIMIT 1 会产生二义性, 执行器不知道LIMIT 1 是UNION 后执行,还是SELECT c_name FROM ssbm.customer LIMIT 1 后再 UNION SELECT c_custkey FROM ssbm.customer。 gbase> SELECT c_custkey FROM ssbm.customer UNION SELECT c_name FROM ssbm.customer LIMIT 1; ERROR 1733 (HY000): Gbase general error: UNION/INTERSECT/MINUS of non-matching columns: LONGLONG UNION/INTERSECT/MINUS VARCHAR 示例5:DATETIME 和TIMESTAMP 类型的UNION。 gbase> CREATE TABLE t_student (sno int, sname varchar(100),sdate datetime); Query OK, 0 rows affected gbase> INSERT INTO t_student VALUES(1,'Tom',NOW()),(2,'Jim',NOW()); Query OK, 2 rows affected Records: 2 Duplicates: 0 Warnings: 0 gbase> SELECT * FROM t_student; +------+-------+---------------------+ | sno | sname | sdate | +------+-------+---------------------+ | 1 | Tom | 2013-10-14 17:56:19 | | 2 | Jim | 2013-10-14 17:56:19 | +------+-------+---------------------+ 2 rows in set gbase> CREATE TABLE t_Result (sno int, sresult decimal(10,2),sdate timestamp);