![](/img/trans.png)
[英]How do you insert multiple rows of data using SQL or PLSQL into a table in Oracle?
[英]PLSQL Oracle: How to insert data in a table using stocked procedures
我试图通过几个小时来解决问题,但是我无法解决。 如果您能帮助我解决一些问题,我将不胜感激。
我有2个表:1.名为LASTNAME的表,其中一列n(varchar2)存储一些姓氏; 2.名为FIRSTNAME的表,其中有一列p(varchar2)存储一些名字。 我必须用这两个表中的数据生成2000个全名(姓和名)的组合。
我的想法是:
select DISTINCT *
from LASTNAME
CROSS JOIN FIRSTNAME
WHERE ROWNUM <= 2000;
生成所有组合。
我必须将这2000个全名放在另一个称为“学生”的表中。 我给你介绍一下学生:
Name Null Type
------------ -------- ------------
REG_NUMBER NOT NULL CHAR(4)
LASTNAME VARCHAR2(20)
FIRSTNAME VARCHAR2(10)
YEAR NUMBER(1)
GROUP CHAR(2)
SCHOLARSHIP NUMBER(6,2)
DATE_OF_BIRTH DATE
对于要放入表格中的新学生,我必须为组(1-7之间),年份(1-3之间)和奖学金生成随机值。
所有这些操作都必须使用存储过程来完成。
您可以使用单个SQL语句将数据插入表中,如下所示:
insert into students ( REG_NUMBER,
LASTNAME,
FIRSTNAME,
"YEAR",
"GROUP",
SCHOLARSHIP,
DATE_OF_BIRTH
)
select to_char(rownum, 'fm0000'),
n,
p,
floor(dbms_random.value(1, 4)),
floor(dbms_random.value(1, 8)),
round(dbms_random.value(1, 9999),2),
null
from (
select distinct *
from LASTNAME
CROSS JOIN FIRSTNAME
)
WHERE ROWNUM <= 2000;
该语句仅使用您的起始数据,为其余字段添加一些随机值; 我将birthdate保留为空,但是如果需要,您可以使用另一个随机值来填充此字段。
假设reg_number
是主键,我使用rownum
来填充它; 格式掩码'fm0000'
表示使用前导零('0001','0002',...)将数字精确格式化为4位数字,以防止前导空格。
这是一个简单的SQL语句; 您可以根据需要将其包装在一个过程中。
请注意,您的餐桌students
有以保留字命名的列(例如GROUP
),因此我必须使用引号; 最好避免使用此类列名。
如果您想要随机的名称对(包括重复的名称对的可能性),则可以执行以下操作:
INSERT INTO STUDENTS (
REG_NUMBER,
LASTNAME,
FIRSTNAME,
YEAR,
"GROUP",
SCHOLARSHIP,
DATE_OF_BIRTH
)
SELECT TO_CHAR(rownum, 'fm0000'),
n,
p,
FLOOR( DBMS_RANDOM.VALUE(1, 4) ),
FLOOR(DBMS_RANDOM.VALUE(1, 8)),
ROUND(DBMS_RANDOM.VALUE(0, 9999), 2),
ADD_MONTHS( TRUNC(SYSDATE), -12*18 )
+ FLOOR( DBMS_RANDOM.VALUE(0,365*4+1) )
FROM ( SELECT FLOOR(DBMS_RANDOM.VALUE(0,(SELECT COUNT(*) FROM LASTNAME)))+1 AS lrn,
FLOOR(DBMS_RANDOM.VALUE(0,(SELECT COUNT(*) FROM FIRSTNAME)))+1 AS frn
FROM DUAL
CONNECT BY LEVEL <= 2000
) r
INNER JOIN
( SELECT n, ROWNUM AS rn FROM LASTNAME ) l
ON ( r.lrn = l.rn )
INNER JOIN
( SELECT p, ROWNUM AS rn FROM FIRSTNAME ) f
ON ( r.frn = f.rn );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.