例如,假設我們有兒童桌和糖果桌。
create table kids( kid_name varchar2(20), money number);
create table candy( candy_name varchar(20), price number);
我想創建一個程式(銷售),它會為隨機的kid_name 購買一個隨機的candy_name 進行銷售。在每次銷售中,孩子們的錢都在減少,直到所有孩子的錢:= 0。我如何用 while 回圈表達它?
uj5u.com熱心網友回復:
除非孩子們的錢是糖果價格的精確倍數(或者當孩子們沒有足夠的錢時糖果店愿意以較低的價格出售糖果),那么你不太可能達到0.
例如,如果您有以下表格:
CREATE TABLE kids (kid_name, money) AS
SELECT 'Alice', 1.23 FROM DUAL UNION ALL
SELECT 'Beryl', 2.34 FROM DUAL UNION ALL
SELECT 'Carol', 4.56 FROM DUAL;
CREATE TABLE candy (candy_name, price) AS
SELECT 'A', 0.12 FROM DUAL UNION ALL
SELECT 'B', 0.23 FROM DUAL UNION ALL
SELECT 'C', 0.34 FROM DUAL;
和程式:
CREATE PROCEDURE sell_random_candy
IS
BEGIN
LOOP
MERGE INTO kids dst
USING (
SELECT k.ROWID rid,
c.price
FROM kids k
INNER JOIN candy c
ON (c.price <= k.money)
ORDER BY DBMS_RANDOM.VALUE
FETCH FIRST ROW ONLY
) src
ON (src.rid = dst.ROWID)
WHEN MATCHED THEN
UPDATE
SET money = dst.money - src.price;
EXIT WHEN SQL%ROWCOUNT = 0;
END LOOP;
END;
/
然后在運行該程式后,該kids表可能隨機包含:
KID_NAME 錢 愛麗絲 .06 綠柱石 .03 頌歌 .08
這還不夠買更多的糖果。
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/367889.html
上一篇:plsql觸發器生成和插入值
