我想使用存储过程将各种用户插入到Oracle数据库中.用户(表“用户”)具有姓名,姓氏和出生日期:
CREATE TABLE "USER" ( "Name" VARCHAR2(50),"Surname" VARCHAR2(50),"Dt_Birth" DATE,)
创建用户的存储过程非常简单:
CREATE PROCEDURE Insert_User(p_user,p_surname,p_dt_birth) BEGIN INSERT INTO User(Name,Surname,Dt_Birth) VALUES(p_user,p_dt_birth); END;
如果我想创建存储过程以插入变量(1或2或3等)用户数,该怎么办?谢谢
另请注意,上面的代码仅用于示例,因此可能存在随机错误位
解决方法
您可以使用一组记录同时插入多个用户.考虑:
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
这里我定义了两种数据类型:一种是包含一个用户数据的RECORD类型,另一种是包含多条记录的INDEX BY TABLE.现在程序本身:
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
然后你会调用这样的程序:
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