2011-06-08 33 views
0

當試圖插入一條記錄到一個表,我得到序列錯誤:的CakePHP在Oracle調用seq.currval時沒有序列存在

Query: SELECT my_table_seq.currval FROM dual 
Warning (512): SQL Error: ORA-02289: sequence does not exist 

有此表上沒有序列。它更像是一個HABTM。我有一個表:

CREATE TABLE "MYSCHEMA"."MY_TABLE" 
(
    "WORK_ID" NUMBER NOT NULL ENABLE, 
    "ITEM_ID" NUMBER NOT NULL ENABLE, 
    CONSTRAINT "MY_TABLE_PK" PRIMARY KEY ("WORK_ID", "ITEM_ID") 
) 

我使用手動添加這兩個標識:

$this->MyModel->set(array('work_id' => 1, 'item_id' => 2)); 
$this->MyModel->save(); 

任何想法如何避免錯誤?我只需要執行$this->MyModel->query()並手動運行查詢?

+0

我不確定我是否理解這個問題。您是否問如何讓Oracle避免在查詢使用無效序列時拋出異常?如何在不引用序列的情況下填充此表中的數據?還有別的嗎? – 2011-06-08 16:16:55

+0

如何避免拋出錯誤?可以做到嗎?數值顯示在數據庫中。 – 2011-06-08 16:23:46

+0

我仍然不確定我是否理解這個問題。如果您發佈的SQL語句由於引用了無效的序列名稱而引發錯誤,顯而易見的答案是不發出該SQL語句(或發出引用有效序列名稱的SQL語句)。但我認爲你知道這一點,並有一些複雜的因素,可以防止你簡單地刪除SQL語句... – 2011-06-08 16:26:09

回答

1

CakePHP希望連接表(作爲HABTM關係的一部分)具有自己的主鍵。

http://book.cakephp.org/view/1044/hasAndBelongsToMany-HABTM

你的情況:

CREATE TABLE MY_TABLE 
(
    ID  NUMBER NOT NULL, 
    WORK_ID NUMBER NOT NULL, 
    ITEM_ID NUMBER NOT NULL, 
    CONSTRAINT MY_TABLE_PK PRIMARY KEY (ID), 
    CONSTRAINT MY_TABLE_UK UNIQUE (WORK_ID, ITEM_ID) 
) 

而且不要忘記添加MY_TABLE_SEQ序列:

CREATE SEQUENCE MY_TABLE_SEQ; 
+0

我想要一個表格,我可以在沒有單獨的ID的情況下輸入數據。我想使用work_id和item_id作爲PK。 – 2011-06-11 13:31:24

+1

對不起,CakePHP的魔法並不適用。也許你應該堅持已經找到的解決方法。 – 2011-06-14 08:03:23

0

發生的事情是,當蛋糕呼籲甲骨文lastinsertid表,它查詢該表的序列。如果沒有提供序列,它只是假設$ tablename + _seq。

你可以做的是告訴cakephp模型你正在使用哪個序列表。

MyModel.php 

class MyModel extends AppModel{ 
//in my case 
//my table name was so long it required a shorter sequence name :D 
var $sequence = 'my_table_seq'; 
... 
} 
相關問題