加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle:存储过程的可变参数数量

发布时间:2021-04-02 19:31:02 所属栏目:站长百科 来源:网络整理
导读:我想使用存储过程将各种用户插入到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

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读