Sybase Sequence

落爺英雄遲暮 提交于 2019-12-02 00:49:15

问题


I am creating a sequence in sybase but getting mentioned exception, can anyone please help?

CREATE OR REPLACE SEQUENCE dbo.event_id_sequence
    START WITH 100
    INCREMENT BY 1
    MINVALUE 100
    NO MAXVALUE
    NO CACHE  
    NO CYCLE    
go

GRANT USAGE ON SEQUENCE dbo.event_id_sequence TO userID maintenance
GRANT USAGE ON SEQUENCE dbo.event_id_sequence TO userID readonly
GRANT USAGE ON SEQUENCE dbo.event_id_sequence TO userID reports
go

Exception:

[Error] Script lines: 1-14 ------------------------- Incorrect syntax near the keyword 'REPLACE'. Msg: 156, Level: 15, State: 2 [Executed: 7/7/14 2:06:02 PM EDT ] [Execution: 0/ms]

[Error] Script lines: 15-19 ------------------------ Incorrect syntax near 'USAGE'. Msg: 102, Level: 15, State: 84

[Error] Script lines: 15-19 ------------------------ Incorrect syntax near 'USAGE'. Msg: 102, Level: 15, State: 84

[Error] Script lines: 15-19 ------------------------ Incorrect syntax near 'USAGE'. Msg: 102, Level: 15, State: 84

[Executed: 7/7/14 2:06:02 PM EDT ] [Execution: 0/ms]


回答1:


Sybase ASE does not have sequence, the code you found is likely pulled from Sybase IQ or possible SQL Anywhere.

Instead of using sequence, you should look at using IDENTITY columns instead.

If that does not suit your needs, Sybase suggests a number of other approaches that may give you what you are looking for.

Methods:

Methods which can be used to produce a monotonic series are:

Max Plus One

Enhanced Max Plus One

Next Key Table

Identity Property

All of these are detailed in the linked document.

I would also suggest reviewing page 20 of this presentation on Migration from Oracle to ASE from SAP Techwave. There is some sample code on how to emulate SEQUENCE using a sequence table/procedure.

CREATE TABLE my_seq (seq int) 
go 
//initialize the sequence 
INSERT INTO my_seq select 0 
go 
CREATE PROCEDURE get_seq (@seq int OUTPUT) 
AS UPDATE my_seq SET seq = seq+1 
SELECT @seq = seq FROM my_seq 
go 
// execute the sp to get the next sequence number 
DECLARE @seq int 
EXEC get_seq @seq OUTPUT 
INSERT INTO m_table VALUES (@seq,..) 
go

Outdated Link - http://www.sybase.com/detail?id=860



来源:https://stackoverflow.com/questions/24616967/sybase-sequence

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!