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

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

发布时间:2021-04-03 11:08: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

(编辑:湖南网)

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

    热点阅读