更新触发器表值Oracle SQL

时间:2018-02-12 19:33:23

标签: sql oracle plsql

添加以下触发器后,我无法更新表格。以下是我到目前为止的情况:

CREATE TABLE ITEM(
item_id  DECIMAL(10) NOT NULL,
description  VARCHAR(30),
price  DECIMAL(10),
PRIMARY KEY (item_id));

CREATE TABLE Item_price_history (
history_id  DECIMAL(10) NOT NULL,
item_id  DECIMAL(10) NOT NULL,
line_price DECIMAL(10,2),
new_line_price DECIMAL(10,2),
modified DATE,
PRIMARY KEY (HISTORY_ID),
FOREIGN KEY (ITEM_ID) REFERENCES item);

CREATE OR REPLACE TRIGGER Item_price_history
AFTER UPDATE OR INSERT ON ITEM 
FOR EACH ROW  
BEGIN
   INSERT INTO item_price_history(item_id, line_price, 
    new_line_price,modified) 
   select item_id,:OLD.price,:New.price, SYSTIMESTAMP from item;
END;

现在,如果我使用以下Update命令,则会出现此错误:

UPDATE item_price_history
SET line_price = 4
WHERE ITEM_ID=ITEM.ITEM_ID and ITEM.DESCRIPTION='Spoon';

*错误报告 - SQL错误:ORA-00904:"项目"。"描述":无效的标识符 00904. 00000 - "%s:无效标识符" *原因:
动作:

任何帮助或建议或建议?

3 个答案:

答案 0 :(得分:1)

请你试试这个:

UPDATE item_price_history 
SET line_price = 4
WHERE item_id IN (SELECT item_id
                  FROM ITEM
                  WHERE description = 'Spoon');

答案 1 :(得分:1)

您也可以尝试下面的合并。这不会更新任何内容,因为项目表中没有Spoon描述和item_id的记录。 不确定你想要达到的目的。我看到你创造了一个触发器。仅当项目上的插入/更新不在item_price_history上时触发器才会触发。

merge INTO item_price_history tgt USING
(SELECT item_id, description FROM item
) src ON (tgt.item_id = src.item_id AND src.description = 'Spoon')
WHEN matched THEN
  UPDATE SET line_price = 4;

- 更新零记录

答案 2 :(得分:0)

试试这个......

PdfReader cover = new PdfReader(coverpage); PdfReader reader = new PdfReader(source); PdfStamper stamper = new PdfStamper(reader, new FileStream(dest, FileMode.Create)); stamper.InsertPage(1, cover.GetPageSizeWithRotation(1)); PdfContentByte page1 = stamper.GetOverContent(1); PdfImportedPage page = stamper.GetImportedPage(cover, 1); page1.AddTemplate(page, 0, 0); stamper.Close(); cover.Close(); reader.Close();