如何从 PL/SQL 中的 table 的第一个值循环到最后一个值
How to loop from the first to the last value of a table in PL/SQL
我可以写什么来获取 table 从第一个到最后一个的所有 ID 号?
CREATE OR REPLACE FUNCTION PRICE(
L_CUST_ID PRICELIST.CUSTOMERS_ID%TYPE,
L_ITEMS_ID PRICELIST.ITEMS_ID%TYPE,
P_PRICELIST_PRICE NUMBER)
)
RETURNS NUMBER AS
BEGIN
FOR I IN 1..< last id of customers> LOOP
FOR I IN 1..< last id of items> LOOP
INSERT INTO PRICE
(CUSTOMERS_ID, ITEMS_ID, P_PRICE)
VALUES
( L_CUST_ID, L_ITEMS_ID,ROUND(dbms_random.value(0,15),4));
END LOOP;
END LOOP;
RETURN L_CUST_ID;
END PRICE;
你真的不想使用嵌套循环;对于小数据集,您不会注意到任何差异,但是 - 如果表包含很多行,逐行处理会越来越慢,性能会受到影响。
因此,您为什么不直接交叉连接这些表呢?这是一个例子。
示例表:
SQL> select * From customers;
CUSTOMERS_ID NAME
------------ ------
1 Little
2 Foot
SQL> select * From items;
ITEMS_ID NAME
---------- -------
10 Gloves
11 Matches
12 Bottle
插入交叉连接数据:
SQL> insert into price (customers_id, items_id, p_price)
2 select c.customers_id, i.items_id, round(dbms_random.value(0, 15), 4)
3 from customers c cross join items i;
6 rows created.
结果:
SQL> select * from price;
CUSTOMERS_ID ITEMS_ID P_PRICE
------------ ---------- ----------
1 10 11,5653
1 11 8,9442
1 12 4,4143
2 10 5,3387
2 11 14,602
2 12 14,2723
6 rows selected.
SQL>
我可以写什么来获取 table 从第一个到最后一个的所有 ID 号?
CREATE OR REPLACE FUNCTION PRICE(
L_CUST_ID PRICELIST.CUSTOMERS_ID%TYPE,
L_ITEMS_ID PRICELIST.ITEMS_ID%TYPE,
P_PRICELIST_PRICE NUMBER)
)
RETURNS NUMBER AS
BEGIN
FOR I IN 1..< last id of customers> LOOP
FOR I IN 1..< last id of items> LOOP
INSERT INTO PRICE
(CUSTOMERS_ID, ITEMS_ID, P_PRICE)
VALUES
( L_CUST_ID, L_ITEMS_ID,ROUND(dbms_random.value(0,15),4));
END LOOP;
END LOOP;
RETURN L_CUST_ID;
END PRICE;
你真的不想使用嵌套循环;对于小数据集,您不会注意到任何差异,但是 - 如果表包含很多行,逐行处理会越来越慢,性能会受到影响。
因此,您为什么不直接交叉连接这些表呢?这是一个例子。
示例表:
SQL> select * From customers;
CUSTOMERS_ID NAME
------------ ------
1 Little
2 Foot
SQL> select * From items;
ITEMS_ID NAME
---------- -------
10 Gloves
11 Matches
12 Bottle
插入交叉连接数据:
SQL> insert into price (customers_id, items_id, p_price)
2 select c.customers_id, i.items_id, round(dbms_random.value(0, 15), 4)
3 from customers c cross join items i;
6 rows created.
结果:
SQL> select * from price;
CUSTOMERS_ID ITEMS_ID P_PRICE
------------ ---------- ----------
1 10 11,5653
1 11 8,9442
1 12 4,4143
2 10 5,3387
2 11 14,602
2 12 14,2723
6 rows selected.
SQL>