如何从 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>