Sql 从给定字符串插入随机数

Sql 从给定字符串插入随机数,sql,oracle,plsql,oracle-sqldeveloper,Sql,Oracle,Plsql,Oracle Sqldeveloper,我的目的是编写一个insert语句,从给定字符串中添加一个随机值,更具体地说,如果此人已婚、单身或鳏夫。我需要首先用数百个随机条目填充我的表,因为我需要在表上运行Autotrace并检查其优化。无论如何,我首先创建了表,然后填充了所有的列,除了关于婚姻状况的列。然后我想为此编写一个不同的INSERT语句,因为我认为将它放入我用来填充表的plSQL块中可能更容易。这是我的密码: create table employees( id_employee integer not null,

我的目的是编写一个insert语句,从给定字符串中添加一个随机值,更具体地说,如果此人已婚、单身或鳏夫。我需要首先用数百个随机条目填充我的表,因为我需要在表上运行Autotrace并检查其优化。无论如何,我首先创建了表,然后填充了所有的列,除了关于婚姻状况的列。然后我想为此编写一个不同的INSERT语句,因为我认为将它放入我用来填充表的plSQL块中可能更容易。这是我的密码:

create table employees(
    id_employee integer not null,
    name varchar2(50) not null,
    surname varchar2(50) not null,
    marital_status varchar2(50),
    birthday date);

ALTER TABLE employees ADD CONSTRAINT employees_pk PRIMARY KEY ( id_employee );

declare 
  id_employee integer:= 1;
begin
  while id_employee <= 20 loop
    insert into employees values (id_employee, dbms_random.string('l', 10), dbms_random.string('l', 10), null, TO_DATE(
              TRUNC(
                   DBMS_RANDOM.VALUE(TO_CHAR(DATE '2016-01-01','J')
                                    ,TO_CHAR(DATE '2020-12-31','J')
                                    )
                    ),'J'
               ));
    id_employee:= id_employee + 1;
  end loop;
end;
create table employees(
id\u员工整数不为空,
名称varchar2(50)不为空,
姓氏varchar2(50)不为空,
婚姻状况varchar2(50),
生日);
ALTER TABLE employees添加约束employees\u pk主键(id\u employee);
声明
id_员工整数:=1;
开始

虽然id_employee如果我理解正确,您根本不需要PL/SQL—所有事情都可以在一个
insert
语句中完成(或者
select
,如果您愿意的话)。以下是方法:

SQL> CREATE TABLE employees
  2  (
  3     id_employee      INTEGER PRIMARY KEY,
  4     name             VARCHAR2 (50) NOT NULL,
  5     surname          VARCHAR2 (50) NOT NULL,
  6     marital_status   VARCHAR2 (50),
  7     birthday         DATE
  8  );

Table created.

SQL> CREATE SEQUENCE seqes;

Sequence created.
插入示例行:

SQL> INSERT INTO employees (id_employee,
  2                         name,
  3                         surname,
  4                         marital_status,
  5                         birthday)
  6         SELECT seqes.NEXTVAL id_employee,
  7                DBMS_RANDOM.string ('l', 10) name,
  8                DBMS_RANDOM.string ('l', 10) surname,
  9                --
 10                CASE
 11                   WHEN MOD (seqes.NEXTVAL, 3) = 0 THEN 'single'
 12                   WHEN MOD (seqes.NEXTVAL, 2) = 0 THEN 'married'
 13                   ELSE 'widower'
 14                END marital_status,
 15                --
 16                TO_DATE (
 17                   TRUNC (
 18                      DBMS_RANDOM.VALUE (TO_CHAR (DATE '2016-01-01', 'J'),
 19                                         TO_CHAR (DATE '2020-12-31', 'J'))),
 20                   'J') birthda
 21           FROM DUAL
 22     CONNECT BY LEVEL <= 20;

20 rows created.
SQL> SELECT * FROM employees;

ID_EMPLOYEE NAME         SURNAME      MARITAL_STATUS  BIRTHDAY
----------- ------------ ------------ --------------- ----------
          1 cpewxypfop   urkqkpapdk   widower         22.12.2018
          2 qjslhprqxf   jxoaennyqe   married         27.08.2017
          3 jjwknqkcel   zkmnwtoovv   single          25.10.2018
          4 levwydigey   numbxjvjtc   married         12.02.2019
          5 hswtiotjin   cjdfiastvi   widower         30.01.2019
          6 yxahvjfmre   dnlfmkphmv   single          11.08.2017
          7 nctcntredz   raqpofzufx   widower         29.05.2018
          8 wyivovpnoc   ikjakuzanf   married         19.09.2016
          9 rvtbqfgqnu   iuqjqosait   single          28.07.2018
         10 oislloosfy   xtfxpnceik   married         30.03.2020
         11 issbxtldsn   bovdghpjke   widower         21.09.2018
         12 gzgjdlvwcw   rmfqglwohc   single          11.12.2019
         13 utbznnyyhs   ojcswdwuvh   widower         21.12.2019
         14 etsvhavose   fypgntictn   married         23.03.2018
         15 myjijmagej   lvmpbcvcfc   single          12.09.2016
         16 givwwayxkf   hgemcfvnff   married         13.02.2016
         17 nquarbpzlf   zwgjukhgxg   widower         07.09.2018
         18 lnyyrkohac   ttygaxmvle   single          25.05.2020
         19 gmqboujcbb   qszmifozcs   widower         20.09.2019
         20 eegwdvqvld   dsembshumq   married         04.09.2020

20 rows selected.

SQL>