当销售代表向 Customers 表添加新客户时,使用一个存储过程获取要插入的主键值。此示例使用一个存储过程来提供主键值,使用另一个存储过程来执行插入操作。
创建一个在远程数据库中运行的过程以从主键池表中获取主键。
例如,NewKey 过程提供键池中的一个整数值,并将该值从池中删除。
CREATE PROCEDURE NewKey( IN @table_name VARCHAR(40), OUT @value INTEGER ) BEGIN DECLARE NumValues INTEGER; SELECT COUNT(*), MIN(value) INTO NumValues, @value FROM KeyPool WHERE table_name = @table_name AND location = CURRENT PUBLISHER; IF NumValues > 1 THEN DELETE FROM KeyPool WHERE table_name = @table_name AND value = @value; ELSE // Never take the last value, because // ReplenishPool will not work. // The key pool should be kept large enough // that this never happens. SET @value = NULL; END IF; END; |
NewKey 过程利用这样一个事实:销售代表标识符是远程数据库的 CURRENT PUBLISHER。
创建一个在远程数据库中运行的过程以在预订表中插入新行。
例如,NewCustomers 过程将新客户插入到表中,同时使用通过 NewKey 获取的值来构造主键。
CREATE PROCEDURE NewCustomers( IN customer_name CHAR( 40 ) ) BEGIN DECLARE new_cust_key INTEGER ; CALL NewKey( 'Customers', new_cust_key ); INSERT INTO Customers ( cust_key, name, location ) VALUES ( 'Customers ' || CONVERT (CHAR(3), new_cust_key), customer_name, CURRENT PUBLISHER ); ); END |
可通过这种方式增强此过程:对通过 NewKey 获取的 new_cust_key 值进行测试以检查该值是否为 NULL,如果是 NULL,则禁止插入。
![]() |
使用DocCommentXchange 讨论此页。
|
版权 © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |