【发布时间】:2012-01-22 01:36:48
【问题描述】:
我正在尝试将一些 Informix ESQL 转换为 Oracle Pro*C。在现有的 Informix 代码中,“SERIAL”数据类型用于指示自动递增的列。根据 Oracle 文档,Informix 的 Oracle Migration Workbench 应该能够处理这个问题,它解释说它将“SERIAL”数据类型转换为具有相关 Oracle 序列和触发器的“NUMBER”。但是,在尝试运行该工具时,它只是将“SERIAL”一词替换为“ERROR(SERIAL)”,因此我一直在尝试手动添加触发器/序列。
他们的例子在这里:http://docs.oracle.com/html/B16022_01/ch2.htm#sthref112 展示了一种可以做到这一点的方法。该序列似乎相当简单,但是当尝试像这样创建触发器时:
CREATE TRIGGER clerk.TR_SEQ_11_1
BEFORE INSERT ON clerk.JOBS FOR EACH ROW
BEGIN
SELECT clerk.SEQ_11_1.nextval INTO :new.JOB_ID FROM dual; END;
Pro*C 预处理器在这里选择“CREATE”关键字,并决定不允许我使用宿主变量“:new.JOB_ID”,因为宿主变量不能与“CREATE”语句一起使用.
我的问题是,是否有某种方法可以创建一个触发器,将 Oracle 序列链接到特定列,而不使用主机变量来指定列名? Oracle 文档似乎表明他们的迁移工具应该能够应付,这意味着必须有某种方法可以做到这一点。但是,我发现的所有触发器使用示例都使用导致预处理器抱怨的主机变量。
感谢您的宝贵时间。
(注意:我在上例的 Oracle 文档中使用了示例中的触发器/序列/列名称。)
【问题讨论】:
-
为什么不用 SQL 脚本创建触发器呢?我认为不需要在 C 程序中执行此操作。
-
现有的 ESQL 程序是用 C 编写的,我的任务是将现有的代码批量转换为现在使用 Pro*C。不幸的是,我无权改变它的工作方式。
标签: oracle triggers auto-increment informix embedded-sql