赞
踩
游标概念:游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。游标类型:隐式游标和显式游标。在前面所述的程序中有用到的SELECT...INTO...查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标。但是如果要提取多行数据,就要由程序员定义一个显式游标,并通过与游标有关的语句进行处理。显式游标对应一个返回结果为多行多列的SELECT语句,游标一旦打开,数据就从数据库中传送到游标变量中,然后应用程序再从游标变量中分解出需要的数据,并进行处理。
- <查询表达式>::=
- <simple_select>|
- <select_clause> <ORDER BY 子句> <LIMIT 限制条件> <FOR UPDATE 子句>|
- <select_clause> <ORDER BY 子句> [<FOR UPDATE 子句>] [<LIMIT 限制条件>]|
- <select_clause> <LIMIT 子句> <ORDER BY 子句> [<FOR UPDATE 子句>] |
- <select_clause> <FOR UPDATE 子句> [<LIMIT 限制条件>] |
- <select_clause> <LIMIT 限制条件>[<FOR UPDATE 子句>]
- <simple_select> ::=
- <query_exp_with>|
- <select_clause> <UNION| EXCEPT | MINUS | INTERSECT > [ALL | DISTINCT |
- UNIQUE] [CORRESPONDING [BY (<列名> {,<列名>})]] <select_clause>
- <select_clause>::= <simple_select>|
- (<查询表达式>)| (<select_clause>) <ORDER BY 子句>::= ORDER [SIBLINGS] BY < order_by_list>
- <order_by_list>::= < order_by_item >{,<order_by_item>}
- <order_by_item>::= <exp> [ASC | DESC] [NULLS FIRST|LAST]
- <exp >::=<无符号整数> | <列说明> | <值表达式> <FOR UPDATE 子句> ::=
- FOR READ ONLY|
- FOR UPDATE [OF <选择列表>] [NOWAIT | WAIT N | SKIP LOCKED]
- <LIMIT 限制条件> ::=<LIMIT 子句>|< ROW_LIMIT 子句>
- <LIMIT 子句>::=LIMIT< <记录数> | <<记录数>,<记录数>>| <<记录数> OFFSET <偏移量>> >
- <记录数>::=<整数> <偏移量>::=<整数>
- < ROW_LIMIT 子句>::= [OFFSET <offset> <ROW | ROWS> ] [<FETCH 说明>]
- <FETCH 说明>::= FETCH <FIRST | NEXT> <大小> [PERCENT] < ROW | ROWS > <ONLY| WITH
- TIES>
- <query_exp_with>::=[<WITH 子句>] SELECT [<HINT 子句>] [ALL | DISTINCT | UNIQUE] [<TOP 子句>] <选择列表>[<bulk_or_single_into_null>] <select_tail>
- <选择列表> ::= [[<模式名>.]<基表名> | <视图名> .] * | <值表达式> [[AS] <列别名>]
- {,[[<模式名>.]<基表名> | <视图名>.] * | <值表达式> [[AS] <列别名>]}
- <WITH 子句> ::= [<WITH FUNCTION 子句>] [WITH CTE 子句] 请参考第 4.4 节 WITH 子句
- <HINT 子句> ::=/*+ hint{hint}*/
- <TOP 子句>::=
- TOP <n> |
- <<n1>,<n2>>|
- <n> PERCENT|
- <n> WITH TIES|
- <n> PERCENT WITH TIES
- <n>::=整数(>=0)
- <bulk_or_single_into_null>::=<bulk_or_single_into> <变量名 >{,<变量名>}
- <bulk_or_single_into>::= <INTO>| <BULK COLLECT INTO>
- <select_tail>::=
- <FROM 子句>
- [<WHERE 子句>]
- [<层次查询子句>]
- [<GROUP BY 子句>]
- [<HAVING 子句>]
- <FROM 子句>::= FROM <表引用>{,<表引用>}
- <表引用>::=<普通表>|<连接表> <普通表>::=<普通表 1>|<普通表 2>|<普通表 3>|<ARRAY<数组>>
- <普通表 1>::=<对象名> [<SAMPLE 子句>][[AS <别名>] <PIVOT 子句>][[AS <别名>]
- <UNPIVOT 子句>] [<闪回查询>] [[AS] <别名>] <普通表 2>::=(<查询表达式>)[[AS <别名>] <PIVOT 子句>][[AS <别名>] <UNPIVOT 子句>]
- [<闪回查询>][[AS] <表别名> [<新生列>]]
- <普通表 3>::=[<模式名>.]<<基表名>|<视图名>>(<选择列>)[[AS <别名>] <PIVOT 子句>]
- [[AS <别名>] <UNPIVOT 子句>] [<闪回查询>] [[AS] <表别名> [<派生列表>]]
- <对象名>::=<本地对象> | <索引> | <分区表> <本地对象>::=[<模式名>.]<基表名|视图名> <索引>::=[<模式名>.]<基表名> INDEX <索引名>
- <分区表>::=
- [<模式名>.]<基表名> PARTITION (<一级分区名>) |
- [<模式名>.]<基表名> PARTITION FOR (<表达式>,{<表达式>})| [<模式名>.]<基表名> SUBPARTITION (<子分区名>)|
- [<模式名>.]<基表名> SUBPARTITION FOR (<表达式>,{<表达式>}) <选择列>::=<列名>[{,<列名> }]
- <派生列表>::=(<列名>[{,<列名>}])
- <SAMPLE 子句>::=
- SAMPLE(<表达式>) |
- SAMPLE(<表达式>) SEED (<表达式>) |
- SAMPLE BLOCK(<表达式>) |
- SAMPLE BLOCK(<表达式>) SEED (<表达式>)
- <闪回查询>::= <闪回查询子句>|<闪回版本查询子句>请参考第 17 章 闪回查询
- <闪回查询子句>::=WHEN <TIMESTAMP time_exp> | <TRXID trxid>
- <闪回版本查询子句>::=VERSIONS BETWEEN <TIMESTAMP time_exp1 AND time_exp2> |
- <TRXID trxid1 AND trxid2>
- <连接表>::=[(]<交叉连接>|<限定连接>[)]
- <交叉连接>::=<表引用> CROSS JOIN <<普通表>|(<连接表>)> <限定连接>::=<表引用> [<PARTITION BY 子句>] [NATURAL] [<连接类型>] JOIN <<普通
- 表>|(<连接表>)> [<PARTITION BY 子句>]
- <连接类型>::=
- [<内外连接类型>] INNER| <内外连接类型> [OUTER] <内外连接类型>::=LEFT|RIGHT|FULL
- <连接条件>::=<条件匹配>|<列匹配> <条件匹配>::=ON<搜索条件> <列匹配>::=USING(<连接列列名>{, <连接列列名>})
- <WHERE 子句> ::=
- WHERE <搜索条件>|
- < WHERE CURRENT OF 子句>
- <搜索条件>::=<逻辑表达式> < WHERE CURRENT OF 子句>::=WHERE CURRENT OF <游标名> <层次查询子句>::=
- CONNECT BY [NOCYCLE] <连接条件>[START WITH <起始条件> ] |
- START WITH <起始条件> CONNECT BY [NOCYCLE] <连接条件> <连接条件>::=<逻辑表达式> <起始条件>::=<逻辑表达式>
- <GROUP BY 子句> ::= GROUP BY <group_by 项>{,<group_by 项>}
- <group_by 项>::=<分组项>|<ROLLUP 项>|<CUBE 项>|<GROUPING SETS 项> <分组项>::=<值表达式>
- <ROLLUP 项>::=ROLLUP (<分组项>)
- <CUBE 项>::=CUBE (<分组项>)
- <GROUPING SETS 项>::=GROUPING SETS(<GROUP 项>{,<GROUP 项>})
- <GROUP 项>::=
- <分组项> | (<分组项>{,<分组项>})|
- ()
- <HAVING 子句> ::= HAVING <搜索条件>
- <PARTITION BY 子句> ::=PARTITION BY (<表列名>{,<表列名>})
- <PIVOT 子句> ::= PIVOT [XML] ( (<集函数> {,<集函数>}) <pivot_for_clause> IN
- (<pivot_in_clause>) )
- <pivot_for_clause> ::=
- FOR <列名> |
- FOR (<列名>{,<列名>})
- <pivot_in_clause> ::=
- <表达式> [ [AS] <别名>] {,<表达式> [[AS] <别名>]} | (<表达式>) [ [AS] <别名>] {,(<表达式> )[[AS] <别名>]} |
- <select_clause> |
- ANY
- <UNPIVOT 子句> ::= UNPIVOT [<include_null_clause>](<unpivot_val_col_lst>
- <pivot_for_clause> IN (<unpivot_in_clause_low> ))
- <include_null_clause> ::=
- INCLUDE NULLS |
- EXCLUDE NULLS
- <unpivot_val_col_lst> ::=
- <表达式> | (<表达式>{,<表达式>})
- <unpivot_in_clause_low> ::= <unpivot_in_clause>{,<unpivot_in_clause>}
- <unpivot_in_clause> ::=
- <列名> [AS <别名>] |
- (<列名>{,<列名>}) [ AS (<别名>{,<别名>})] |
- (<列名>{,<列名>}) AS <别名>

注意准备两台数据库服务器 A、B(目前只支持同平台,不支持跨平台建数据库连接),均安装了 DM 数据库,网络必须互通。
两台服务器,其中一个为目的主机 A,另一个为测试机 B;分别在这两台服务器上进入数据库安装目录下的库目录里修改 dm.ini 文件:MAL_INI=1
,实例名 INSTANCE_NAME 要对应,且配置 dmmal.ini(如无此文件,新建此文件)如下所示:
- [mal_inst1]
- mal_inst_name = DMSERVER --A的实例名
- mal_host = 127.0.0.1 --A的ip
- mal_port = 5236
- [mal_inst2]
- mal_inst_name = DMSERVER2 --B的实例名
- mal_host = 127.0.0.1 --B的ip
- mal_port = 5237
注意
A 和 B 的实例名不能一样;中文注释部分只是方便解释含义,配置 dmmal.ini 时不必写,以免造成格式问题导致 dmserver 服务无法启动。 两台主机的 dmmal.ini 文件相同。配置成功之后分别重启 dmserver DM 数据库服务。
在主机 A 上建表 test,如下所示:
CREATE TABLE TEST(C1 INT,C2 VARCHAR(20));
在 B 上建立到 A 的数据库链接 LINK01,使用链接进行插入、更新和删除操作。如下所示:
- CREATE PUBLIC LINK LINK01 CONNECT WITH SYSDBA IDENTIFIED BY SYSDBA USING '127.0.0.1/5282';
- INSERT INTO TEST@LINK01 VALUES(1,'A');
- INSERT INTO TEST@LINK01 VALUES(2,'B');
- UPDATE TEST@LINK01 SET C2='C' WHERE C1=1;
- DELETE FROM TEST@LINK01 WHERE C1=2;
- COMMIT;
在 B 上查询 A 服务器上表 test 的数据。如下所示:
select * from TEST@LINK01;
输出结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。