2

这是一个关于如何创建带有变量的序列的简单问题。我想使用系统时间的组合创建一个序列作为它的起始值。我该怎么做。

这是我写的:

DECLARE
  SQS number :=(sysdate - to_date('01-JAN-1970','DD-MON-YYYY')) * (864000);
  sql_stmt varchar2(200);
BEGIN
  sql_stmt := 'create SEQUENCE XXXX_id_seq MINVALUE  100000 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH :1 CACHE 500 NOORDER CYCLE';
  EXECUTE IMMEDIATE sql_stmt using SQS;
END;

但它说无效的号码。我知道这是一个菜鸟问题。但我真的需要帮助。

4

1 回答 1

3

您不能在 DDL 语句中绑定变量(我没有文档或一个很好的理由,但是很多参考资料都提到了这一事实),您必须将所有内容连接在一起。

DECLARE
  SQS number :=(sysdate - to_date('01-JANV.-1970','DD-MON-YYYY')) * (864000);
  sql_stmt varchar2(200);
BEGIN
  sql_stmt := 'create SEQUENCE XXXX_id_seq MINVALUE  100000 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH '||SQS||' CACHE 500 NOORDER CYCLE';
  EXECUTE IMMEDIATE sql_stmt ;
END;
于 2012-11-01T09:23:28.947 回答