【问题标题】:How to call a function that fills all table columns with random values?如何调用用随机值填充所有表列的函数?
【发布时间】:2021-12-27 07:41:47
【问题描述】:

我创建了一个名为 customers_data 的函数,它在客户表中返回随机值。 到目前为止一切都编译成功。但是当我打电话给这个时

DECLARE

X_C NUMBER NOT NULL :=5 ;
Y_C NUMBER NOT NULL :=8 ;

BEGIN 

 FOR LOOP_COUNTER IN X_C..Y_C LOOP

   select * into CUSTOMERS from CUSTOMERS_DATA;

 END LOOP;

END;

错误是:

ORA-06550

以及 CUSTOMERS_DATA 函数:

CREATE OR REPLACE FUNCTION  CUSTOMERS_DATA

RETURN NUMBER AS CR_ID NUMBER;

   BEGIN

      CR_ID := CUSTOMERS_ID_SEQ.NEXTVAL;

     INSERT INTO CUSTOMERS(CUSTOMERS_ID, CUSTOMERS_CODE )

          VALUES(CR_ID, dbms_random.string('X',10));

     
     RETURN CR_ID;

     
END CUSTOMERS_DATA;

【问题讨论】:

  • 您没有定义名为customers 的变量,因此into 子句无法工作
  • 此外,CUSTOMERS_DATA 的外观如何? FROM 子句依赖它。
  • 为什么不包含错误信息?没有人知道所有的错误代码,帮助我们帮助你
  • @Littlefoot 那是 CUSTOMERS_DATA 代码
  • 具有副作用的函数(除了,可能是日志记录)在命名约定中是非常具有误导性的设计,尤其是当您不使用返回值时。你真正需要的是一个程序和forall instead of loop,以避免在糟糕的代码设计中练习。

标签: sql oracle function random plsql


【解决方案1】:

在我看来,您似乎想运行这个:

功能:

SQL> CREATE OR REPLACE FUNCTION CUSTOMERS_DATA
  2     RETURN NUMBER
  3  AS
  4     CR_ID  NUMBER;
  5  BEGIN
  6     CR_ID := CUSTOMERS_ID_SEQ.NEXTVAL;
  7
  8     INSERT INTO CUSTOMERS (CUSTOMERS_ID, CUSTOMERS_CODE)
  9          VALUES (CR_ID, DBMS_RANDOM.string ('X', 10));
 10
 11     RETURN CR_ID;
 12  END CUSTOMERS_DATA;
 13  /

Function created.

PL/SQL 块:

SQL> DECLARE
  2     X_C   NUMBER NOT NULL := 5;
  3     Y_C   NUMBER NOT NULL := 8;
  4     l_id  NUMBER;
  5  BEGIN
  6     FOR LOOP_COUNTER IN X_C .. Y_C
  7     LOOP
  8        l_id := customers_data;
  9     END LOOP;
 10  END;
 11  /

PL/SQL procedure successfully completed.

结果:

SQL> SELECT * FROM customers;

CUSTOMERS_ID CUSTOMERS_CODE
------------ --------------------
           1 465MT9ECDL
           2 4TY1QS8S75
           3 VNN0ZVP12W
           4 HSP5RIQSIE

SQL>

【讨论】:

  • 它在 pl/sql 块中返回了相同的错误。下划线的customers_data。 ora-06550
  • 不应该,因为如您所见,我发布的代码工作没有错误。
  • 它运行。谢谢!
猜你喜欢
  • 2013-03-14
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
相关资源
最近更新 更多