我如何在运行时将多条记录插入 table PL SQL on (apex.oracle.com)

How can i insert multiple record into a table at runtime PL SQL on (apex.oracle.com)

我想在运行时将新记录插入 table。我正在使用 apex.oracle.com 平台。

我创建了以下 table:-

CREATE TABLE STUDENTS(ID VARCHAR2(10),NAME VARCHAR2(50),COURSE VARCHAR2(10),MOBILE NUMBER(10),EMAIL VARCHAR2(50));

并创建此过程以将记录插入 table:-

CREATE OR REPLACE PROCEDURE "INSERTRECORD" (ID IN VARCHAR2,NAME IN VARCHAR2,COURSE IN VARCHAR2,MOBILE IN NUMBER,EMAIL IN VARCHAR2)
IS
BEGIN
INSERT INTO STUDENTS VALUES(ID,NAME,COURSE,MOBILE,EMAIL);
END;
DECLARE
RECORD_SIZE NUMBER := 2;
ID VARCHAR2(10);
NAME VARCHAR2(50);
COURSE VARCHAR2(10);
MOBILE NUMBER(10);
EMAIL VARCHAR2(50);
I NUMBER;
BEGIN
FOR I IN 1..RECORD_SIZE LOOP
ID:=:ID;
NAME:=:NAME;
COURSE:=:COURSE;
MOBILE:=:MOBILE;
EMAIL:=:EMAIL;
INSERTRECORD(ID,NAME,COURSE,MOBILE,EMAIL);
END LOOP;
END;

我无法在用户指定的运行时插入记录....我收到此错误。 有人可以解决这个问题吗?或者可以帮助我在运行时将记录插入 table。

错误:-

ORA-01722: invalid number
ORA-06512: at "WKSP_CUPLSQL.INSERTRECORD", line 4
ORA-06512: at line 16
ORA-06512: at "SYS.DBMS_SQL", line 1721


2. RECORD_SIZE NUMBER := 2;
3. ID VARCHAR2(10);
4. NAME VARCHAR2(50);
5. COURSE VARCHAR2(10);
6. MOBILE NUMBER(10);

我不确定您为什么需要手术。在 Oracle 中,要将包含列 col1、col2 和 col3 的多行插入到 table t 中,您可以使用以下语法:

INSERT ALL
   INTO t (col1, col2, col3) VALUES ('val1_1', 'val1_2', 'val1_3')
   INTO t (col1, col2, col3) VALUES ('val2_1', 'val2_2', 'val2_3')
   INTO t (col1, col2, col3) VALUES ('val3_1', 'val3_2', 'val3_3')
   .
   .
   .
SELECT 1 FROM DUAL;

Or

INSERT  INTO t (col1, col2, col3) 
   SELECT 'val1_1', 'val1_2', 'val1_3' from dual UNION ALL
SELECT 'val1_4', 'val1_5', 'val1_6'
FROM DUAL

这里要记住的是使用 from dual 语句。

试试这个。对我有用。


DECLARE
    record_count NUMBER := 10;
BEGIN
    FOR i IN 1..record_count
    LOOP
        insertrecord (:id, :student_name, :course, :mobile, :email);
    END LOOP;
END;
/

NAME 是一个 Oracle 关键字,因此它不是一个好的列名或变量名。我改成了student_name.

PL/SQL 不是交互式语言。 SQL*Plus 提示您输入一个值,它需要获取所有需要的替代值,然后才能将 PL/SQL 块发送到数据库以执行。 PL/SQL 无法提示用户输入,因此无法在 PL/SQL 循环中提示用户输入。

如果您试图让用户输入许多值,而他们需要输入的值的数量在编译时是未知的,那么您通常最好编写一个小型应用程序(shell 脚本、Perl 脚本、小型 C 应用程序等),使用支持用户交互并将其提供给用户的语言。让应用程序获取用户输入,然后将其传递给 PL/SQL 进程。