oracle中的序列问题

首先,我在perl脚本的oracle中创建了一个序列。我得到一个错误的statiing序列已经创建错误。有没有办法重置序列(创建或替换不工作)
create or replace sequence test_seq start with 1900 increment by 1 nomaxvalue

sprintf("INSERT INTO Custodian_New (Loginid,Type, Id, User, TimeCreated, RcNumber) values ('%s',1, %d, '%s', %d, '%s')", seq_name.nextVal,$dd, $Name, time(), $rc_num); 
perl脚本中的上述语句打印:序列的'test_seqnextVal'。 所以一个错误
DBD::Oracle::db do failed: ORA-01722: invalid number (DBD ERROR: error possibly near <*>seq_name )occurs.
请告诉我有什么问题?谢谢。     
已邀请:
对于ORA-01722,你的
sprintf
%s
附近有单引号,因此它会尝试将字符串
"seq_name.nextVal"
插入数字字段而不是序列中的值;该字符串无法转换为数字,因此出错。您可以删除单引号:
sprintf("INSERT INTO Custodian_New (Loginid, Type, Id, User, TimeCreated, RcNumber) values (%s, 1, %d, '%s', %d, '%s')", "seq_name.nextVal", $dd, $Name, time(), $rc_num);
或者直接嵌入序列,因为似乎没有动态构建它的任何点:
sprintf("INSERT INTO Custodian_New (Loginid, Type, Id, User, TimeCreated, RcNumber) values (seq_name.nextVal, 1, %d, '%s', %d, '%s')", $dd, $Name, time(), $rc_num);
或者甚至更好,使用绑定变量并将其设置为
$dd
等。我也使用
sysdate
而不是传入
time()
,但不知道这是否真的有任何区别。     
有关序列重置,请参阅如何在Oracle中重置序列?     

要回复问题请先登录注册