簡體   English   中英

我的查詢生成ORA-00933錯誤,為什么?

[英]My query generates an ORA-00933 error, why is that?

我正在使用php生成如下的oracle查詢:

...

$sql = sprintf("INSERT INTO $table_name %s %s ON DUPLICATE KEY UPDATE ", 
            $this->prepare_insert_sql("", $fields, false), 
            $this->prepare_insert_sql(" VALUES ", $values, true));
    for ($index = 0; $index < count($fields); $index++) {
        if ($index > 0) {
            $sql .= ", ";
        }
        $sql .= $fields[$index] . "='" . $values[$index] . "'";
    }
...

結果查詢為:

INSERT INTO TBL_CONFIG(KEY,VALUE) 
VALUES ('1_default_meter_type_for_device_type_1','822') 
ON DUPLICATE KEY 
UPDATE KEY='1_default_meter_type_for_device_type_1', VALUE='822'

它給出了ORA-00933錯誤。

我似乎真的找不到錯誤。 任何提示,不勝感激。

根據您發布的代碼, KEY是保留字,因此您需要使用""雙引號對其進行轉義,如下所示

INSERT INTO TBL_CONFIG("KEY",VALUE) 
VALUES ('1_default_meter_type_for_device_type_1','822') 
ON DUPLICATE KEY 
UPDATE "KEY"='1_default_meter_type_for_device_type_1', VALUE='822'

編輯:

完全困惑。 Oracle沒有ON Dulicate Key Update 您必須使用Fred-ii注釋的MERGE語句。

使用merge而不是insert into工作。

MERGE INTO TBL_CONFIG USING DUAL ON (KEY ='1_default_meter_type_for_device_type_1')
WHEN MATCHED THEN UPDATE SET VALUE = '822'
WHEN NOT MATCHED THEN INSERT (KEY, VALUE) VALUES ('1_default_meter_type_for_device_type_1', '822')

嘗試這個:

$sql = sprintf(
    "INSERT INTO $table_name %s %s ON DUPLICATE KEY UPDATE ",
    $this->prepare_insert_sql("", $fields, false),
    $this->prepare_insert_sql(" VALUES ", $values, true)
);

for($index = 0; $index < count($fields); $index++) {
    if($index > 0) {
        $sql .= ", ";
    }

    // added " before and after field name
    $sql .= '"' . $fields[$index] . '"=\'' . $values[$index] . "'";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM