2013-08-28 64 views
0

我在這裏看到了同樣的問題Create a Sequence with START WITH from Query但它不起作用。它有12票,所以我不知道爲什麼它不適合我。如何創建一個以查詢值開始的序列

這是我有:

declare 
    l_new_seq INTEGER; 
begin 
    select max(expense_detailid) + 1 
    into l_new_seq 
    from expense_detail; 

    execute immediate 'create sequence expense_detail_seq 
         start with ' || l_new_seq || ' increment by 1'; 
end; 
/

,這是錯誤我得到:

ORA-06550: line 3, column 17: 
PLS-00103: Encountered the symbol "create sequence expense_detail_seq start with " when expecting one of the following: 

    := . (@ % ; 
The symbol ":=" was substituted for "create sequence expense_detail_seq start with " to continue. (DBD ERROR: error possibly near <*> indicator at char 27 in ' 
    BEGIN 
     immediate <*>'create sequence expense_detail_seq start with ' || l_new_seq || ' increment by 1'; 
    END; 
    ') 

ORA-00900: invalid SQL statement 

任何想法?謝謝!

+1

你說你在做什麼很好,但是你顯示的錯誤信息表明你實際上在運行不同的東西。 'execute'關鍵字缺失(這會導致此錯誤),並且您有一個額外的開始/結束包裝。我想知道如果你的客戶端(我猜這是一個DBD引用的Perl腳本?)正在用'exec'取代'execute',並且可能運行單獨的語句。引用的行號令人困惑。如果你從SQL * Plus提示符執行'exec immediate ...',你會得到完全的結果,除了它會說第1行。如果它在腳本中,你能顯示上下文嗎? –

+0

適用於我:http://sqlfiddle.com/#!4/4d6f7/1您使用哪種工具來運行語句?也許它不識別'/'分隔符? –

+0

我創建了一個.sql文件,我使用yasql來加載文件。 –

回答

1

將所有文本放在一行中。或者至少每個文字。

此外,什麼是產品/實用程序和產品版本?

+0

開始和執行每個都有自己的完整行,沒有中斷(我在這裏添加它們只是爲了顯示)。 至於版本: Oracle數據庫10g第二版10.2.0.4.0 - 64位生產 PL/SQL發佈10.2.0.4.0 - 生產 CORE 10.2.0.4.0生產 TNS版:10.2.0.4.0版本 - 生產 NLSRTL版本10.2.0.4.0 - 生產 –

+1

除非令客戶感到困惑,否則通常不需要在一條線上;它將來自SQL * Plus的'exec'(儘管你可以使用延續字符),但不能與'execute immediate'一起使用。文字雖然可以在這裏分開。 –

+0

@茫然而迷茫這很奇怪。它在我的配置中沒有問題執行。你能從頭開始鍵入文本還是刪除控制字符?這是我能想到的唯一。 –

相關問題