我如何在运行时将多条记录插入 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 进程。
我想在运行时将新记录插入 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 进程。