返回首页

gbase数据、南大通用产品文档:GBase8c

更新日期:2024年09月11日

示例
下面示例中用到的表定义如下:
postgres=# \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)|
--演示在函数中对数组进行操作。
postgres=# 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;

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
628
--将一个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;
--调用该函数。
postgres=# CALL regress_record('abc');
--删除函数。
postgres=# DROP FUNCTION regress_record;

(1 row)
实际上它被分析器转换成:

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
617
gbase=#SELECT round(CAST (4 AS numeric), 4);
因为带小数点的数值常量初始时被赋予numeric 类型,
因此下面的查询将不需要类型转
换,并且可能会略微高效一些:
gbase=#SELECT round(4.0, 4);
示例2:子字符串函数类型解析。有好几个substr 函数,其中一个接受text 和integer
类型。如果用一个未声明类型的字符串常量调用它,系统将选择接受string 类型范畴的首选
类型(也就是text 类型)的候选函数。
gbase=#SELECT substr('1234', 3); substr
--------
34
(1 row)
如果该字符串声明为varchar 类型,就像从表中取出来的数据一样,分析器将试着将其
转换成text 类型:
gbase=#SELECT substr(varchar '1234', 3); substr
--------
34
(1 row)
被分析器转换后实际上变成:
gbase=#SELECT substr(CAST (varchar '1234' AS text), 3);

分析器从pg_cast 表中了解到text 和varchar 是二进制兼容的,
意思是说一个可以传
递给接受另一
个的函数而不需要做任何物理转换。因此,
在这种情况下,实际上
没有做任何类型转换。
而且,如果以integer 为参数调用函数,分析器将试图将其转换成text 类型:
gbase=#SELECT substr(1234, 3); substr
--------
34
(1 row)
被分析器转换后实际上变成:

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
618
gbase=#SELECT substr(CAST (1234 AS text), 3); substr
--------
34
(1 row)

列级别同步需要在config_task.xml 文件配置源数据库和目标数据库的表
的列的映射关系。
下面按照步骤详细介绍:
修改任务文件config_task.xml,该文件在读端,写端,管理端各有一份,
如果同步工具安装后再修改该文件请确保三处配置文件一致。列级别配置需要

GBase RTSync 同步工具手册
南大通用数据技术股份有限公司
- 101 -
在表级别的基础上修改配置,在table 标签的下级增加column-mapping 标签,
并配置好源端列名与目标端列名。


...



sourcePkColName="" targetTableName="t1" targetPkColName="" >






...

消息队列配置文件与库级别同步相同。
完成后,既可启动同步工具。使用root 用户登录192.168.5.3,执行如下
命令启动同步工具组件:
# cd /opt/RTSync /
# sh RTSyncManagerServer.sh start
启动后,同步工具将开始同步数据工作。
可以使用如下命令监控同步工具运行状况。
# tail -f logs/sync.log