Oracle:存储过程的可变参数数量
发布时间:2021-04-03 15:01:20 所属栏目:站长百科 来源:网络整理
导读:我想使用存储过程将各种用户插入到Oracle数据库中.用户(表“用户”)具有姓名,姓氏和出生日期: CREATE TABLE "USER" ( "Name" VARCHAR2(50),"Surname" VARCHAR2(50),"Dt_Birth" DATE,) 创建用户的存储过程非常简单: CREATE PROCEDURE Insert_User(p_user,p_
我想使用存储过程将各种用户插入到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 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |