I want to INSERT various users into a Oracle db with a stored procedure. A user (table "user") has, say, name, surname and date of birth:
CREATE TABLE "USER"
(
"Name" VARCHAR2(50),
"Surname" VARCHAR2(50),
"Dt_Birth" DATE,
)
A stored procedure to create a user is pretty simple:
CREATE PROCEDURE Insert_User(p_user, p_surname, p_dt_birth)
BEGIN
INSERT INTO User(Name, Surname, Dt_Birth) VALUES(p_user, p_surname, p_dt_birth);
END;
What if I want to create a stored procedure to insert a variable (1 or 2 or 3 etc) number of users? Thanks
Also, please note that the above code is just for sample, so random incorrect bits may be present
You could use an array of records to insert several users at the same time. Consider:
SQL> CREATE TABLE "USER" (
2 "Name" VARCHAR2(50),
3 "Surname" VARCHAR2(50),
4 "Dt_Birth" DATE
5 );
Table created
SQL> CREATE OR REPLACE PACKAGE user_pkg IS
2
3 TYPE user_rec IS RECORD (
4 name VARCHAR2(50),
5 surname VARCHAR2(50),
6 dt_birth DATE
7 );
8 TYPE user_tab IS TABLE OF user_rec INDEX BY BINARY_INTEGER;
9
10 PROCEDURE insert_user(p_user user_tab);
11
12 END user_pkg;
13 /
Package created
Here I defined two datatypes: a RECORD
type that will contain the data for one user and an INDEX BY TABLE
that will contain several records. Now the procedure itself:
SQL> CREATE OR REPLACE PACKAGE BODY user_pkg IS
2
3 PROCEDURE insert_user(p_user user_tab) IS
4 BEGIN
5 FOR i IN 1..p_user.count LOOP
6 INSERT INTO "USER"("Name", "Surname", "Dt_Birth")
7 VALUES (p_user(i).name,
8 p_user(i).surname,
9 p_user(i).dt_birth);
10 END LOOP;
11 END insert_user;
12
13 END user_pkg;
14 /
Package body created
You would then call the procedure like this:
SQL> DECLARE
2 l_user_tab user_pkg.user_tab;
3 BEGIN
4 SELECT owner, object_name, created
5 BULK COLLECT INTO l_user_tab
6 FROM all_objects
7 WHERE ROWNUM <= 3;
8 user_pkg.insert_user(l_user_tab);
9 END;
10 /
SQL> SELECT * FROM "USER";
Name Surname Dt_Birth
------- -------- -----------
SYS IND$ 12/05/2000
SYS ICOL$ 12/05/2000
SYS OBJ$ 12/05/2000
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With