[英]is there any statement to turn row value into same row but different column in oracle?
[英]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.