簡體   English   中英

Oracle DB更新語句,同值不同目標行

[英]Oracle DB Update statement, same value different targeted rows

在我的程序中,我想插入表順序並更新表銷售員

create or replace PROCEDURE place_order(
    PURCH_AMT   in varchar,
    CUSTOMER_ID in varchar,
    SALESMAN_ID in varchar
) AS
order_id varchar(50);
ORD_DATE varchar(50);

--INICIO
begin
    --VARS
        order_id := sys_guid();
        ORD_DATE := SYSDATE;
    --INSERT da order
        insert into ORDERS values (order_id, PURCH_AMT, ORD_DATE, CUSTOMER_ID, SALESMAN_ID);
        DBMS_OUTPUT.put_line('out put with variable salesman_id');
        DBMS_OUTPUT.put_line(SALESMAN_ID);
    --UPDATE sales do salesman
        update salesman
        set n_sales = n_sales + 1
        where salesman.SALESMAN_ID = SALESMAN_ID;
    --COMMIT
        COMMIT;
    EXCEPTION
        WHEN OTHERS THEN
            ROLLBACK;
            RAISE;     
        
end place_order;

但是當我運行它時,它會更新所有的推銷員表格和輸出

當我更改程序更新並對銷售員 ID 進行硬編碼時,它會起作用

DBMS_OUTPUT.put_line('output with harcoded 5001');
        DBMS_OUTPUT.put_line(5001);
    --UPDATE sales do salesman
        update salesman
        set n_sales = n_sales + 1
        where salesman.SALESMAN_ID = '5001';

更新工作

這是錯誤的:

create or replace PROCEDURE place_order(
    PURCH_AMT   in varchar,
    CUSTOMER_ID in varchar,
    SALESMAN_ID in varchar          --> this
) AS
<snip>
    --UPDATE sales do salesman
        update salesman
        set n_sales = n_sales + 1
        where salesman.SALESMAN_ID = SALESMAN_ID;
                       -----------   -----------
                         this

切勿將參數命名為與列名相同。 正如您所做的那樣, where子句被評估為類似於where 1 = 1 which means update ALL rows in that table的東西。

重命名參數; 通常,我們給它們加上前綴,例如

create or replace PROCEDURE place_order(
    PAR_PURCH_AMT   in varchar2,
    PAR_CUSTOMER_ID in varchar2,
    PAR_SALESMAN_ID in varchar2
) AS
<snip>
    --UPDATE sales do salesman
        update salesman
        set n_sales = n_sales + 1
        where salesman.SALESMAN_ID = PAR_SALESMAN_ID;

(此外,Oracle 建議我們使用varchar2而不是varchar

暫無
暫無

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

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